线程的状态
新建 可运行 运行 阻塞 终止
创建线程的两种方式
1.通过继承Thread类重写run方法来创建线程
例如 A extends Thread{ 重写run方法 }
new A.start();
2.通过实现Runnable接口,重写run方法来创建线程
例如A implement Runnable{ 重写run方法 }
new Thread(new A()).start();
实际开发中,实现Runnable接口的方式更常用,因为java是不允许多继承的,如果当前程序已经继承了一个类,就不能用extends Thread 类的方式来创建多线程了。
另外,通过实现Runnable接口的方式创建线程,对数据共享也是有好处的。
Runnable接口出现,降低了线程对象和线程任务的耦合性。
简单的方法
sleep() 和 join()
sleep()方法用来放弃cpu的使用权,使线程进入休眠状态,参数为毫秒
join()方法则是用来抢占cpu的使用权。
线程优先级
java优先级有10个等级 用数字1-10表示,10为最高
获取优先级方法 public int getPriority()
设置线程优先级方法 public void setPriority(int newPriority)
获取当前线程Thread.currentThread()
获取主线程优先级,在主线程中调用Thread.currentThread().getPriority();
设置优先级也可以使用静态常量 Thread.MAX_PRIORITY Thread.MIN_PRIORITY Thread.NORM_PRIORITY
分别代表 10 1 5
同步
防止线程后置引发的一系列问题,关键字synchronized
使用方法1.成员方法中添加 public synchronized void play(){}
使用方法2.静态方法中添加 public static synchronized void play(){}
使用方法3.语句块中添加 synchronized(obj){} obj为操作的对象
线程间通信问题
当多个线程synchronized方法中使用wait()进行等待另一个方法进行时,可能会出现所有线程都进入等待状态,这种状态叫做线程死锁,此时需要唤醒线程,使用notify()或者notifyAll() ,前者为随机唤醒一个,后者为唤醒全部。所以一般使用notifyAll();