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

怎样做网站网站网站整体规划方案

怎样做网站网站,网站整体规划方案,批量制作图片的软件,中国建设网站用户名一、信号量Semaphore 本质上就是一个计数器,描述了一种“可用资源”的个数 申请资源(P操作):使得计数器-1 释放资源(V操作):使得计数器1 如果计数器为0了,继续申请资源&#xff…

一、信号量Semaphore

本质上就是一个计数器,描述了一种“可用资源”的个数

申请资源(P操作):使得计数器-1

释放资源(V操作):使得计数器+1

如果计数器为0了,继续申请资源,就会触发阻塞

上述+1 -1 这些操作,都是原子的

Java把操作系统提供的信号量进行封装

package Thread;import java.util.concurrent.Semaphore;public class demo4 {public static void main(String[] args) throws InterruptedException {Semaphore semaphore = new Semaphore(3);semaphore.acquire();System.out.println("执行P操作");semaphore.acquire();System.out.println("执行P操作");semaphore.acquire();System.out.println("执行P操作");semaphore.acquire();System.out.println("执行P操作");}
}

最后输出:

package Thread;import java.util.concurrent.Semaphore;public class demo4 {public static void main(String[] args) throws InterruptedException {Semaphore semaphore = new Semaphore(3);semaphore.acquire();System.out.println("执行P操作");semaphore.release();System.out.println("执行V操作");}
}

输出:

通过信号量来实现原子操作:

package Thread;import java.util.concurrent.Semaphore;public class demo5 {
private static int count = 0;
public static void main(String[] args) throws InterruptedException {Semaphore semaphore = new Semaphore(1);Thread t1 = new Thread(()->{for(int i=0;i<5000;i++){try {semaphore.acquire();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}count++;semaphore.release();}  });Thread t2 = new Thread(()->{for(int i=0;i<5000;i++){try {semaphore.acquire();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}count++;semaphore.release();}});t1.start();t2.start();t1.join(); t2.join();System.out.println(count);
}
}

输出:

信号量,相当于“锁”概念的进一步延申。锁,可以视为是“初始值为1”的特殊信号量。

小结:编写线程安全代码的时候:

1.加锁(最主要)

2.CAS/原子类

3.信号量

package Thread;import java.util.concurrent.CountDownLatch;public class demo6 {public static void main(String[] args) throws InterruptedException {CountDownLatch latch = new CountDownLatch(8);for(int i=0;i<8;i++){int id =i;Thread t = new Thread(()->{try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程"+id+"执行完毕");latch.countDown();//计数器减1});t.start();}//主线程通过await等待所有线程执行完毕//awaur阻塞,直到countDownLatch调用latch.countDown()减为0latch.await();}}

二、多线程环境使用ArrayList

三、多线程环境使用哈希表

HashMap线程不安全

解决方案:

1)自己加锁

2)Hashtable类似于Vector,在关键方法加了synchronized

package Thread;import java.util.Hashtable;public class demo7 {public static void main(String[] args) {Hashtable<String,String> hashtable = new Hashtable<>();hashtable.put("k1", "v1");hashtable.put("k2", "v2");hashtable.put("k3", "v3");hashtable.get("v1");}
}

但是不推荐使用,因为这是个JDK即将要废弃的方案

3)ConcurrentHashMap

ConcurrentHashMap,最大的调整就是针对锁的粒度进行了优化

Hashtable来说,针对this加锁,任何一个线程,只要操作你这个hash表就可能触发锁竞争

两个线程,针对同一个变量进行修改,所以对于哈希表的操作来说,如果两个线程的修改,是在不同的链表上,本身就是线程安全的。只需要针对同一个链表的修改,才引入阻塞。

ConcurrentHashMap使用了锁桶方案,使竞争更小。实践中,一个hash表,桶的个数非常多,针对哈希表元素的操作,大概率是分布在不同的桶上真正触发锁竞争的情况是非常小的,几乎忽略不计。

那么问题来了,ConcurrentHashMap多引入这些锁,是否会有额外的“空间开销”,Java任意对象都可以作为锁对象。实际上直接拿每个链表的头结点作为锁对象即可。

size随着put,remove触发++ 和--

ConcurrentHashMap采取了原子类的方案,基于CAS操作,针对size

ConcurrentHashMap扩容的时候,采取“化整为零的方案”

扩容:搞更大的数组,把原来数组的所有链表元素,重新hash到新数组的链表上。元素本身元素特别多,那么扩容开销就很大。

进行上述搬运的过程中,为了保证线程安全,当然是得加锁的。如果全部进行搬运,持有锁的的实践就会特别长,导致其他线程无法正常使用哈希表了。

因此,ConcurrentHashMap在扩容的时候,不会一股脑把所有的键值全部搬运过去,而是每次都只搬运一点点,以确保这单次搬运的速度足够快,持有锁的实践足够段,一旦触发搬运,每次进行get,put,remove...都会搬运一点。

*假如对size进行加锁,是不是相当于又对this整体加锁:整个哈希表就一个size变量,所有针对size操作的线程就都会引起锁竞争了。前面锁桶方案带来的提升,就被稀释掉了。

http://www.dtcms.com/wzjs/582274.html

相关文章:

  • 网页设计与网站建设基础心得体会成都专业做网站的公司
  • 公司制作一个网站要多少钱h5开发网站优点
  • 成都网站建设专家外贸型网站
  • 广西梧州市住房和城乡建设局网站滁州做网站公司
  • 网站seo注意事项公司网站 数据库
  • 网站建设需要ui吗网站是怎么做的
  • 网站做地区定位跳转有没有做机械加工的网站
  • 贵阳网站建设开发做团建活动网站
  • 贵阳门户网站建设南充房管局官网
  • 网站建设简单合同梁山城乡建设局网站
  • 天津网站搜索排名优化兰州启点网站建设
  • 数码网站建设图片国内外高校门户网站建设的成功经验与特色分析
  • 网站源码下载pdf文件企业内部网络属于什么网络
  • 那位学生网站开发网站建设 需要准备材料
  • 东莞企业网站推广运营泉州网站建设开发
  • 如何把电脑改成服务器做网站本机iis网站
  • 收费看电影网站建设国外代码开源网站
  • 亚马逊国际站官网软件开发办公
  • 网站的logo在百度怎么显示不出来网站三元素怎么做
  • 做网站要花多少钱宝塔网站做301重定向
  • 怎么免费制作网站平台天津先进网站建设指导
  • 网站解析错误网站开发客户需求文档
  • 网站红色搭配沈阳网站建设制作公司
  • 众筹网站搭建鲜花网站建设源代码
  • pageadmin自助建站系统重庆九龙坡营销型网站建设公司哪家好
  • 成都网站建设 小兵cmswordpress怎么放视频
  • 做网站有什么要求中山小程序开发公司
  • 网站的分类有哪些淘宝客新增网站
  • 公司网站建设设计如何收费广州正规的网站建设
  • 潘嘉严个人网站如何建设公司网络营销网站