Day22

一、多线程
1、实现方式:
1)继承Thread类, 重写run(); void
2)实现Runnable接口 重写run(); void
3)实现Callable接口 重写call();带返回值,返回值类型和泛型保持一致。
4)线程池 实现Callable接口 重写call();
2、将线程从运行状态到阻塞状态的四种方法:
1)sleep() :使线程睡眠,加入时间的单位为毫秒,可以自动解锁。
2)join() :等待线程结束(不结束一直等待)。
3)yield():把当前线程挂起,等其他线程结束,再执行。
4)wait():让线程处于阻塞状态,唤醒时调用notify()方法或 notifyAll()。
3、将线程从阻塞状态到运行状态的方法:
调用interrupt() 方法。
4、sleep()和wait()方法的区别
Sleep() wait()
类 Thread类 Object类
唤醒方式 interrupt() notify()方法或 notifyAll()
能否自动解锁: 能 不能
5、锁
作用:提高效率。
分类:
1)synchronized 关键字
如何使用:
1.可以锁方法
2.可以去锁一个代码块
形式: synchronized(放一个对象){
代码
}
2)Lock
使用:Lock 你想在哪加锁就在哪加锁,想在哪解锁就在哪解锁(可以跨方法,类)。
优点:相比 synchronized 更灵活。
3)读写锁:保证数据安全的情况下,提供效率。
读锁:可以有读锁 不能有写锁 。
写锁:不能有其他锁 。
6、死锁:
如何解决死锁问题:
哲学家就餐问题:
筷子类public class KuaiZi {
private String kname;
private boolean b;
public boolean isB() {
return b;
}
public void setB(boolean b) {
this.b = b;
}
public String getKname() {
return kname;
}
public void setKname(String kname) {
this.kname = kname;
}
public KuaiZi(String kname) {
this.kname = kname;
}
@Override
public String toString() {
return kname;
}
哲学家类
public class ZheXueJia extends Thread{
private String zname;
private KuaiZi left;
private KuaiZi right;
public String getZname() {
return zname;
}
public void setZname(String zname) {
this.zname = zname;
}
public ZheXueJia(String zname, KuaiZi left, KuaiZi right) {
this.zname = zname;
this.left = left;
this.right = right;
}
public void run(){
//想解决死锁问题(降低死锁的概率):需要在这些人中有人做出让步
if(zname.equals(“张三”)){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
synchronized(left){
//判断左侧筷子是否使用
if(!left.isB()){
//表示使用状态
System.out.println(zname+“拿了”+left);
left.setB(true);
//判断学者右侧的筷子是否使用
synchronized(right){
if(!right.isB()){
System.out.println(zname+“拿了”+right);
right.setB(true);
System.out.println(zname+“可以吃饭了”);
}
System.out.println(“吃完了”);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
left.setB(false);
right.setB(false);
}
}
}
}
}

女王陛下 2019/4/4 9:03:06
OK

女王陛下 2019/4/4 9:03:12
到22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值