1、线程是一个程序内部的顺序控制流;
2、线程与进程的区别:
(1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大开销;
(2)线程可看成轻量级进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小;
(3)多进程:在操作系统中能同时运行多个任务(程序);
(4)多线程:在同一应用程序中有多个控制流同时执行;
3、java线程通过java.lang.Thread类来实现;
4、每个线程通过Thread对象所对应的方法run()来完成操作,run()称为方法体;
5、通过调用Thread类的start()方法启动线程;
6、如果直接调用run()方法而不调用start()方法,则相当于只有普通的函数调用,并没有启动线程;
7、Java中创建线程的主要方法有两个:
(1)通过继承Thread类创建;
(2)通过实现接口Runnable来实现;
注意:建议创建线程的时候最好采用实现接口的方式,因为采用继承的话只能继承一个类,而采用接口可以实现多个接口,显然更加方便和更加可扩展。
8、多线程中sleep()、wait()、yield()、join()的用法与区别:
(1)sleep()和yield()方法都是Thread类的静态方法,都会使当前处于运行状态的线程放弃CPU,把运行机会让给别的线程;
(2)sleep()会给其他线程机会,而不会考虑它的优先级;而yield()方法只会给相同优先级或者更高优先级的线程一个运行的机会;
(3)当线程执行了sleep(long millis)方法后,将转到阻塞状态;而执行yield()方法后则会转到就绪状态;
(4)sleep()比yield()有更好的可移植性;
(5)jion()方法:等待某个线程的终止。等待调用jion()方法的线程结束,再继续执行。