线程:
1、创建线程: 继承java.lang.Thread类,并重写run()方法 // 继承Thread类后,可以使用this访问当前线程
实现Runnable接口,并重写run()方法 //实现接口后,必须通通过Thread.currentThread()方法访问 当前线程。
2、启动线程:Thread thread = new Thread;
thread.start();
3、线程的生命周期:新建 就绪 阻塞 运行 死亡
4、线程状态:
新建状态:用new关键字创建一个线程对象。
就绪状态:当调用了start(),系统为该线程分配除了cpu之外的所有的资源。
运行状态:处于就绪状态的线程,获得了cpu的使用资格,才开始运行。
阻塞状态:一个正在运行的线程由于某种原因丧失了cpu的使用权,不能继续运行,就由运行状态进入阻塞 状态。
死亡状态:线程的run()方法执行完毕,自然死亡。或程序出现问题非正常死亡。
5、线程休眠: Thread.sleep(1000); //毫秒
6、join线程:Thread提供了让一个线程等待另一个线程完成的方法:join()。当某个程序在执行过程中调用了其他线程的join()方法,则当前线程被阻塞,知道被join()方法加入的线程完成为止。
7、守护线程(Daemon Thread):主线程死亡,无论守护线程是否执行完毕,都会死亡。
8、线程同步:当多个线程同时对同一个实例的同一个实例变量进行操作时,会引起线程同步问题
9、同步代码块:synchronized(this){}
10、同步锁:ReentrantLock reentrantLock = new ReentranctLock();
reentrantLock.lock();
try{ } catch( ){ }finally{
reentrantLock.unlock();
}
Java多线程实现的方式有四种:
1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果;
后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放在Object对象中;