日更(十三)-Android-线程

瞎扯

感觉标题还是不要写挑战了,有点逗
今天写的...
其实我对线程也不是特别熟练.
写写我自己的理解,不是写怎么用线程.

线程

程序执行流的最小单元

每个线程都会从最头执行到return

这里我觉得需要有个概念.

我们写的app是怎么运行的.

main函数

都知道是程序的入口.

那么,从程序启动,到main函数运行.
是不是可以理解成
底层开启一个线程调用了main函数方法.

 new Thread(){
            @Override
            public void run() {
                super.run();
                main();
            }
        }.start();

而我们的app之所以,能一直响应.
无非是main里面Looper死循环这种的.

其实不管什么程序.本质上都是死循环.
保证线程不结束,循环内不停的处理逻辑.

无非是函数套函数.一直不停套下去.

fun a() {
    val x = 1;
}

fun b() {
    val y = 2;
}

fun c() {
    val x = 1;
    val y = 2;
}

把a和b放一个线程.
把c放一个线程.

其线程里的内容就是一样的
线程从头执行到结束.

有人说,你这不废话吗.

我也觉得是废话.

但是,线程的本质就是这样.
哪怕写出花来.

它的本质还是从第一行一直执行到结束.从上到下不停的跑.

所以,能否可以理解成

硬件设备启动系统是一个固定的入口
这个入口,启动各种进程
进程启动着线程
线程跑着代码.

线程打比喻的话就是

一个人看书,必须按书上的内容和条件从第一行按顺序看.
然后看到第十页的第三行的时候.告诉这个人,要从头看一次.
这个人就这样,不停的看不停的看.

书上的内容就是我们写的代码.

线程的源码


    public synchronized void start() {

        if (threadStatus != 0 || started)
            throw new IllegalThreadStateException();

        group.add(this);

        started = false;
        try {
            nativeCreate(this, stackSize, daemon);
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
            }
        }
    }

  private native static void nativeCreate(Thread t, 
long stackSize, boolean daemon);

可以看到这个nativeCreate是jni方法.

我猜底层无非创建了线程对象,然后再调用java的这个thread的run()方法.

说到这,

我又想起了,多线程,本质上是cpu在不停的切换处理不同的请求.只不过速度很快而已.
cpu的一个核心同一时间也只会处理一个请求.


好了,今天就这样了
每天日更,能准备找资料的时间几乎没有,基本是全裸上阵,全靠经验,哈哈
挑战的地方就在这里了.
今天有点水
感觉程序员日更题目还是很好找的.但是想写对,写精还是很难

您的喜欢与回复是我最大的动力-_-
交流群:493180098

猜你喜欢

转载自blog.csdn.net/weixin_34275734/article/details/86984768