瞎扯
感觉标题还是不要写挑战了,有点逗
今天写的...
其实我对线程也不是特别熟练.
写写我自己的理解,不是写怎么用线程.
线程
程序执行流的最小单元
每个线程都会从最头执行到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
网友评论