JAVA中多线程优点
在于取消了主循环/轮询机制。一个线程暂停不影响程序的其他部分。线程在某一操作(用户输入、读取网络数据)时产生的空闲时间可被利用到其他地方。
线程状态
正在运行(Running) --> 挂起(Suspend) --> 恢复(Resume) --> 终止(terminate)。
注意:线程只要获得CPU时间就可运行。挂起后线程临时中断,允许在其中断地方恢复。线程一旦终止就不可被恢复。
wait():告知被调用线程放弃进入管程,进入睡眠,直到其他线程进入相同管程,并且调用notify()。
notify():恢复相同对象第一个调用wait()的线程。
notifyAll():恢复相同对象中所有wait()的线程,优先级最高的先运行。
上述三种方法仅在synchronize方法中才能被调用。
JAVA中创建线程方法
创建线程的方式有两种。 1、继承Thread类 2、实现Runnable接口
继承Thread类
该方法必须重写run()方法,在run()方法中定义需要实现的任务。
创建好线程对象后,调用start()方法去启动线程。注意,不是调用run()方法启动线程,run方法中只是定义需要执行的任务,如果调用run方法,即相当于在主线程中执行run方法,跟普通的方法调用没有任何区别,此时并不会创建一个新的线程来执行定义的任务。
若不同线程对象分别调用run()和start()方法,start()方法作为新线程不会阻塞run()方法作为主线程的后续执行。
实现Runnable接口
通过实现Runnable接口,定义了一个子任务,然后将子任务交由Thread去执行。注意,这种方式必须将Runnable作为Thread类的参数,然后通过Thread的start方法来创建一个新线程来执行该子任务。如果调用Runnable的run方法的话,是不会创建新线程的,这根普通的方法调用没有任何区别。