1》以前别人问线程和进程的区别,我瞠目结舌对是的。我不知道——在我的记忆中线程就是编程中用的方法,进程???。线程和进程的区别是什么——线程是实现多任务的一种方式,代表着一种任务流程;而进程是一个程序动态执行的一个过程,是内存中运行的应用程序,它有自己的内存空间。在这个过程中可能会有多个线程去执行,所以总的上来说进程包含线程或者说有多个线程共享一个进程,而不能说线程是和进程同级的。
2》关于线程的实现方式:
1:继承Tread类。
2:实现Runnable接口。
但无论是那种方式都会重写 run方法。有一点不同的是 继承Tread类的方法调用线程时可以直接创建对象调用start()方法。而 实现Runnable接口的方法则是需要2个步骤:
1):创建实现Runnable类的对象 如:A a = new A();
2):创建Tread的对象比如:Tread t = Tread(a);
然后调用线程 则是:t.start();
3》关于线程的五种状态
1):创建——创建了线程对象在未调用start方法前都属于创建状态。
2):就绪——当线程对象调用了start方法后就属于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态
3):运行——当线程调用程序线程处于就绪状态中的线程时就属于运行状态,此时就会调用run方法体中的内容。
4):阻塞——线程正在运行的时候,被暂停,通常是为了等待某个事件的发生(比如说某项资源就绪)之后再继续运行。
如:sleep,suspend,wait等方法都可以导致线程阻塞。
5):死亡——如果一个线程执行run结束或者被stop后都属于线程死亡,对于死亡的线程无法再使用start方法使之重生。
4》关于start()与run()方法
当我们调用start()方法的时候和直接调用run()方法在本质上是不同的。start()方法是在cpu中申请一个独立的空间作为一个独立的线程然后调用run方法。而直接调用run()方法则是在当前的线程中运行,并非再次创建一个线程。所以说直接调用run()方法不会生产新的线程。
5》sleep(),join()
我想好多人和我一样不清楚他们之间的关系。我也不懂而且一起我想让一个线程在多久之后执行或者在某个条件后执行我总爱喜欢sleep();但是程序毕竟是程序如果你做的软件是要求非常精准度的话就得如深入的考虑他们的区别。sleep可能会有点误差。而用join()可以让程序在某个条件执行后在执行。比如:a,b两个运动员,规定a先跑,b后跑,如果你用sleep方法,规定a跑后 1秒 b跑。这就会有误差。如果你用 join的方法。在a跑后b马上就会跟着跑了。基本没有误差。因为join()方法是判定一个线程执行状态的标准。
对于以上内容是个人观后感以及书上的内容。如果有什么不妥不同的地方希望大家指出!同时也希望各位大咖给出指点。