1.什么是线程:
是进程内执行单元;
2.线程的基本操作:
新建线程:Thread t1 = new Thread();t1.start();
若t1.run();与t1.start()执行方法都是run()方法,但是t1.run()是没有开启一个线程的;
终止线程:Thread.stop();不推荐使用,会释放所有monitor;
中断线程:
public void Thread.interrupt() //中断线程;
public boolean Thread,isInterrupted() /判断是否中断;
public static boolean Thread.interrupted() //判断是否被中断,并清除当前中断状态;
挂起(suspend)和继续执行(resume)线程:
suspend()不会释放锁;如果加锁发生在resume()之前,则发生死锁;
等待线程结束(join)和谦让(yield)
join的本质 while(isActive()){ wait();};线程执行结束后,系统会调用notifyAll()
不要在Thread实例上使用wait()和notify()方法。
3.守护线程:在后台默默完成一些系统性的服务,比如垃圾回收线程,JIT线程就可以理解为守护线程;当一个Java应用内,只有守护线程时,java虚拟机会自然退出。
4.线程的优先级:
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
Thread hight = new HightPriiority();
Thread low = new LowPriiority();
hight.setPriority(Thread.MAX_PRIORITY);
low.setPriority(Thread.MIN_PRIORITY );
low.start();
hight.start();
高优先级的线程更容易在竞争中获胜;
5.基本的线程同步操作
synchronized:
指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁;
直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁;
直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类的锁;
Object.wait() Object.notify()