java多线程

多线程的状态

在这里插入图片描述

多线程的创建

1继承Thread类,重写run方法(缺点:java单继承多实现,所以需要多继承的时候使用runnable接口)
2实现runnable接口,重写run方法(★推荐 1可以多实现 2便于共享资源)
3其他方式(Callable 和 Future)

静态代理模式

真实角色(租房者)
代理角色(中介公司)持有真实对象的引用
两者需实现同一个接口

在代理角色里面创建真实角色对象;
在代理角色的构造方法里把真实角色传进去
this.真实角色 = 真实角色;
然后由于是同一个接口,于是会实现相同的方法,在代理角色的方法里
void method(){
真实角色.method();
}

到了这里,相信大部分人和我的疑惑一样,为什么要这么麻烦的使用同一个方法,有什么意义,随后得到了解答

可以在代理角色里增加before()或者after()方法
void method(){
before();
真实角色.method();
after();
}

这样,就可以进行前置或者后置操作,帮助真实角色完成一些功能,也就是代理,这就是静态代理模式,Thread就是实现了Runnable的代理角色

使用Thread静态代理

1创建真实角色
2创建Thread代理角色同时引用真实角色
Thread thread = new Thread(真实角色,“这是真实角色”);
这种创建方法的意思是,第二个字符串参数代表自定义名字,可以在run方法里用Thread.currentThread().getName()取到
3启动start方法

Runnable的便于共享资源也是使用这个实现的
所谓的共享资源就是使用多个代理角色操作一个真实角色的属性

多线程的使用

创建子类或实现类的对象
创建Thread代理对象 ,把对象放进去
调用代理对象的start方法,start会自动调用run方法

callable接口的使用

在这里插入图片描述

线程(Thread)的方法

.join() 把此线程加入当前线程 先执行完此线程,在执行当前线程
Thread.yeild() 暂停当前线程,进入就绪状态,重新等待CPU调度(不过可能CPU再次调度到它)
Thread.sleep(豪秒) 休眠当前线程一定时间,不会释放锁
Thread.currentThread() 当前线程
.setName 设置线程名
.getName
.isAlive 是否存活
.setpriority 设置线程优先级(CPU调度的概率) MIN_PRIORITY=1 NORM_PRIORITY=5 MAX_PRIORITY=10
.getpriority

线程安全——同步(synchronized)解决多个线程访问同一份资源

效率低,只会让一个线程进入方法,执行完毕在让其他线程进入

同步块 (代表这个引用类型只能被一个线程持有)

synchronized(引用类型,可以是反射){
}

同步方法

public synchronized void method(){
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值