在程序中启动一个新线程运行一段代码有两种方式

一.继承Thread类
1.子类覆盖父类中的run方法,将线程运行的代码存放在run中。
2.建立子类对象的同时线程也被创建。
3.通过调用start方法开启线程。

二.实现Runnable接口
1.子类覆盖接口中的run方法。
2.通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。
3.Thread类对象调用start方法开启线程。

 

Thread常用方法:

start(); -->启动线程。

sleep(); -->线程休眠。

getName(); -->获取当前线程的名称。

currentThread(); -->获取当前线程对象。

interrupt(); -->中断线程的冻结状态,使线程回到运行状态,并抛出异常。

setPriority(int num);-->设置线程优先级。

setDaemon(boolean b); -->设置是否是守护线程,即后台线程,前台线程结束,守护线程自动结束。

join(); -->当A线程执行到B线程的join()方法时,A线程会等待B线程结束后,再继续执行。

yield(); -->放弃CPU控制权。

wait(); -->线程等待。

notify();-->唤醒第一个等待的线程。

notifyAll();-->唤醒所有等待的线程。

 

由于线程同步synchronized效率低,在JDK1.5中被Lock接口所替代。

 ReentrantLock实现了Lock接口,常被Lock实例化;一个Lock对象上允许创建多个Condition对象。

Lock常用方法:

lock(); -->加锁

unlock(); -->解锁

Condition常用方法:

await(); -->Condition上的线程等待。

signal(); -->唤醒Condition上第一个等待的线程。

signalAll(); -->唤醒Condition上所有等待的线程。