1.线程创建:
1.继承Thread类,重写run方法
public class threadDemo extends Thread{
@Override
public void run() {
}
2.实现Runnable接口,重写run方法
public class runnableDemo implements Runnable{
@Override
public void run() {
}
3.实现Callable接口,重写call方法
public class callableDemo implements Callable {//callable返回的是一个Future对象
@Override
public Object call() throws Exception {
return null;
}
线程状态:创建,就绪,运行,阻塞,死亡
线程礼让:yield();
插队:join()//强制插队
线程通信
4.当多个对象同时调用一个共享资源时可能会导致数据错乱,解决方法:1.使用同步方法或同步代码块
synchronized(Object){
}
public synchronized void method(){};
//synchronized若修饰run方法,run在线程的生命周期内一直在运行,导致synchronized调用不会成功
2.lock//jdk1.5以后
public Object object = new Object();
object.lock()//object类里面有lock(),notify(),notifyAll()方法
3.condition
private ReentrantLock lock = new ReentrantLock(true);
private Condition condition = lock.newCondition();
//condition有await(),signal(),signalAll()方法,与lock类似
线程池:
ExecutorService poll = Executors.newFixedThreadPool(10);//开启线程池(不开也行)
Future myFuture1 = poll.submit(new callableDemo());//开启服务
Future myFuture2 = poll.submit(new callableDemo());
poll.shutdown();//关闭线程池