java多线程

线程的状态

新建    可运行    运行    阻塞    终止

创建线程的两种方式

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()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。