当前位置: 首页 > wzjs >正文

湛江海田网站建设招聘可以做请柬的网站

湛江海田网站建设招聘,可以做请柬的网站,wordpress文章 插件,微信小游戏开发平台wait / notify 线程调度是随机的,但是我们可以使用wait/notify进行规划。 join是控制线程结束顺序,而wait/notify是控制详细的代码块,例如: 线程1执行完一段代码,让线程2继续执行,此时线程2就通过wait进…

wait / notify

线程调度是随机的,但是我们可以使用wait/notify进行规划。

join是控制线程结束顺序,而wait/notify是控制详细的代码块,例如:

线程1执行完一段代码,让线程2继续执行,此时线程2就通过wait进行阻塞,等到线程1执行结束后,再通过notify唤醒线程2。

线程饿死:线程1释放锁资源后,其他线程和线程1要进行竞争锁,但是由于其他线程还要进行唤醒操作,可能会出现线程1一直拿到锁资源,导致其他线程拿不到锁的情况。

wait/notify可以解决线程饿死问题

wait / notify 的使用

wait / notify 是Object类中的方法,而Object又是所有类的“祖宗类”,所以我们可以随便创建一个类进行调用wait / notify。

此时调用wait的线程执行到wait时就会触发阻塞,当别的线程调用notify时,wait线程才会解除阻塞。

wait / notify都要再synchronized中使用(wait方法会释放锁对象,因此要先拿到锁),而且两个锁的锁对象要相同,同时调用wait / notify的对象也要是锁对象,这四个地方要同时满足。

wait()方法

1.wait()方法主要进行的是三件事:

1)释放锁对象

2)使当前代码的线程进行等待(将线程添加到等待队列)。

3)满足某个条件时,将重新尝试获取到这个锁,这样重新获取锁才可以继续synchronized保护的代码。

当wait进行阻塞时,会有两个阶段:  

1)WAITING阻塞,wait进行阻塞。

2)BOLOCK阻塞,这个阻塞是执行完notify后,wait会重新尝试获取锁,但是可能会遇到锁竞争导致阻塞。

2.默认情况下,wait()方法进行的是死等,没有notify就会一直阻塞,但是wait()提供了有参数版本。

3.如果是多个wait一个notify,此时唤醒的就是就是随机的wait,可以使用natifyAll,但是这个随机并不是数学上的随机,而是取决于调度器。

sleep和wait两者的区别

1.wait的设计就是为了唤醒操作,而带参版本是后手;sleep的设计是为了到时间唤醒,虽然可以通过interrupt()提前唤醒,但是会抛出异常。

2.wait会释放锁,所以wait要搭配synchronized使用;sleep可以在锁中使用,也不会释放锁,也可以在锁外使用。

设计模式

设计模式是解决一些固定场景的特定套路。

1.单例模式

单个实例(对象),指在设计类时只单独创建一个实例,将构造方法设为private,这样在new时就会报错。

1)饿汉模式

只进行读操作,线程安全

2)懒汉模式

线程不安全

解决方法:加锁

这里的线程安全问题其实是第一次创建时才有线程安全问题,所以我们要进行判断,当不为空时就不去加锁,因为加锁也要开销,第一层if两个线程都进入,但是加上锁后,一个线程阻塞一个执行,当第二个线程开始后,就会判断不成立,此时就直接返回。

在单线程中判断时往往是不变的,但是多线程就可能会有在判断时有别的线程影响。

2.指令重排序触发的线程安全问题

指令重排序是一种优化机制。

上面懒汉模式new一个对象涉及到很多指令,可以抽象三步:

1.申请内存

2,在内存中进行初始化

3.将内存地址,存到变量应用中

编译器可能会优化成1 3 2.

如果在线程1中进行的是1 3 2 的顺序,此时当进行到3时,线程2判断引用不为空,此时就会返回值,但是此时线程1并没有进行初始化操作,所以由线程2返回的值就是错误的。

因此要将这个变量加上volatile来告诉编译器不要进行这样的优化。

阻塞队列

阻塞队列是一种特殊的队列,也是先进先出。

阻塞队列的规则是:

队列为空,尝试出队列,触发阻塞,直到队列不为空。

队列满了,尝试进队列,触发阻塞,直到队列不满。

阻塞队列可以运用在生产者消费者模型中,生产者消费者之间的速度不同,所以引入阻塞队列进行协调作用。

阻塞队列的优点一:减少资源竞争,提高效率。

优点二:可以更好做到代码块之间解耦合。

优点三:可以降低服务器之间的压力,当前面的服务器压力大时,阻塞队列(消息队列)后面的服务器将不会收到太大压力。

阻塞队列的实现

JAVA标准库中就有现成的阻塞队列的实现BlockingQueue。

一种是基于链表实现的,一种基于数组实现,唯一不同的是数组实现的一定要指定最大长度。

模拟实现阻塞队列

class BlockQueue{public String [] arr = null;public int head = 0;public int tail = 0;public int size = 0;public Object object = new Object();public BlockQueue(int m) {arr = new String[m];}public void put(String newele) throws InterruptedException {synchronized (object) {while(size >= arr.length) {object.wait();}arr[tail] = newele;tail++;size++;object.notify();if (tail >= arr.length) {tail = 0;}}}public String take() throws InterruptedException {synchronized (object) {while(size == 0) {object.wait();}String n = arr[head];head++;size--;object.notify();if (head >= arr.length) {head = 0;}return n;}}
}
public class dome12 {public static void main(String[] args) {BlockQueue n = new BlockQueue(100);Thread thread = new Thread(()->{int count = 0;for (int i = 0; i < 100; i++) {try {n.put(" "+count);System.out.println("进入"+count);count++;} catch (InterruptedException e) {e.printStackTrace();}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});Thread thread1 = new Thread(()->{for (int i = 0; i < 100; i++) {try {String k = n.take();System.out.println("取出"+k);} catch (InterruptedException e) {e.printStackTrace();}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});thread1.start();;thread.start();}}


文章转载自:

http://LPFpYgTQ.xbdrc.cn
http://yBiXA4Ft.xbdrc.cn
http://pXJvMrMh.xbdrc.cn
http://6vpakEWR.xbdrc.cn
http://KmPIAfrH.xbdrc.cn
http://ICjsMZyk.xbdrc.cn
http://XzsHuwKb.xbdrc.cn
http://WPLQOETu.xbdrc.cn
http://wAbse2cW.xbdrc.cn
http://Ind9r8DT.xbdrc.cn
http://ppxwFAce.xbdrc.cn
http://1nARX2Ox.xbdrc.cn
http://kb9IbBZH.xbdrc.cn
http://BuNCBP0x.xbdrc.cn
http://Iif7pyHz.xbdrc.cn
http://NVgyKoxV.xbdrc.cn
http://EyuBa6LM.xbdrc.cn
http://xytcZGOd.xbdrc.cn
http://i3T0lLjQ.xbdrc.cn
http://CkoYs1y8.xbdrc.cn
http://uCkPJSel.xbdrc.cn
http://8NbgBODq.xbdrc.cn
http://NOCxD79u.xbdrc.cn
http://nKRXPj5g.xbdrc.cn
http://w12qYzCA.xbdrc.cn
http://RGruCSMo.xbdrc.cn
http://UPcr0Xux.xbdrc.cn
http://wzg5c62e.xbdrc.cn
http://9eoyWaf4.xbdrc.cn
http://EpX7pwdY.xbdrc.cn
http://www.dtcms.com/wzjs/717397.html

相关文章:

  • 成都市温江区建设局网站公司网站 个人备案
  • 闲鱼钓鱼网站怎么制作网站源码被注册为商标
  • 如何做的网站手机可以用英文网站用什么字体好
  • 张家港市住房城乡建设局网站电商自学网免费
  • 单位网站平台建设汇报怎么创办公司
  • 上海松江做网站公司火车头wordpress免登录发布
  • 展示型网站设计案例广东近期新闻
  • 为什么做的网站要续费软件网站的服务器
  • 网站建设申请方案文样网站建设合同用缴印花税吗
  • 网店网站设计论文义乌北苑编程网站开发公司
  • 企业网站php模版2017网络公司排名
  • 网站中的链接是一个一个html做的长沙网站seo费用
  • 物流公司怎么做网站建设网站的方案
  • iis网站服务被禁用云主机网站的空间在哪
  • 网站建设心得感想整容医院网站建设目的
  • 高新营销型网站建设公司餐饮网站模板
  • 伊利网站规划与建设wordpress app 管理
  • seo包括网站建设吗宝洁公司网站建设现状
  • 数据库跟网站网站怎样改logo
  • 门户网站建设多久轻量云做网站怎么样
  • 网站开发的形式有wordpress多个置顶
  • 网站建设与维护实验报告建设网站的基本流程是什么
  • 网站开发需要学mvc吗辽宁鲲鹏建设集团网站
  • 深圳彩票网站建设wordpress 维护中
  • 酷玛网站建设博星卓越 网站开发方案
  • 甘肃省建设厅执业资格注册中心网站辽宁省建设厅官方网站
  • 宁波市市建设法规颁发网站软考考试科目有哪些
  • 郑州flash网站建设网站建设如果登录失败
  • 化妆品网站建设网站域名可以做网站名吗
  • 网站开发语言字典免费淘宝关键词工具