在程序中启动一个新线程运行一段代码有两种方式
一.继承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上所有等待的线程。
本文出自 “許妳柒世溫柔” 博客,请务必保留此出处http://wjyzxc.blog.51cto.com/5725897/1636595
原文地址:http://wjyzxc.blog.51cto.com/5725897/1636595