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

无锡高端网站设计建设怎么制作文件

无锡高端网站设计建设,怎么制作文件,wordpress表情按钮,问答主题WordPress一、了解几个概念 1#xff09;临界区#xff1a; 临界区指的是一个访问共用资源#xff08;例如#xff1a;共用设备或是共用存储器#xff09;的程序片段#xff0c;而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时#xff0c;其他线程或是进…一、了解几个概念  1临界区 临界区指的是一个访问共用资源例如共用设备或是共用存储器的程序片段而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时其他线程或是进程必须等待有一些同步的机制必须在临界区段的进入点与离开点实现以确保这些共用资源是被互斥获得使用  2互斥量 互斥量是一个可以处于两态之一的变量解锁和加锁。这样只需要一个二进制位表示它不过实际上常常使用一个整型量0表示解锁而其他所有的值则表示加锁。互斥量使用两个过程。当一个线程或进程需要访问临界区时它调用mutex_lock。如果该互斥量当前是解锁的即临界区可用此调用成功调用线程可以自由进入该临界区。 另一方面如果该互斥量已经加锁调用线程被阻塞直到在临界区中的线程完成并调用mutex_unlock。如果多个线程被阻塞在该互斥量上将随机选择一个线程并允许它获得锁。  3信号量 信号量(Semaphore)有时被称为信号灯是在多线程环境下使用的一种设施是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前线程必须获取一个信号量一旦该关键代码段完成了那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程需要创建一个信号量VI然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。  4CAS操作Compare-and-Swap CAS有3个操作数内存值V旧的预期值A要修改的新值B。当且仅当预期值A和内存值V相同时将内存值V修改为B 5重排序 编译器和处理器”为了提高性能而在程序执行时会对程序进行的重排序。它的出现是为了提高程序的并发度从而提高性能但是对于多线程程序重排序可能会导致程序执行的结果不是我们需要的结果重排序分为“编译器”和“处理器”两个方面而“处理器”重排序又包括“指令级重排序”和“内存的重排序” 二、Java内存模型JMM 线程与内存交互操作如下  所有的变量实例字段静态字段构成数组对象的 元素不包括局部变量和方法参数都存储在主内存中每个线程有自己的工作内存线程的工作内存保存被线程使用到变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行而不能直接读写主内存的变量。不同线程之间也不能直接访问对方工作内存中的变量线程间变量值的传递通过主内存来完成。   1、Java内存模型定义了八种操作 lock锁定作用于主内存的变量它把一个变量标识为一个线程独占的状态 unlock解锁作用于主内存的变量它把一个处于锁定状态的变量释放出来释放后的变量才可以被其他线程锁定 read读取作用于主内存的变量它把一个变量的值从主内存传送到线程中的工作内存以便随后的load动作使用 load载入作用于工作内存的变量它把read操作从主内存中得到的变量值放入工作内存的变量副本中 use使用作用于工作内存的变量它把工作内存中一个变量的值传递给执行引擎 assign赋值作用于工作内存的变量它把一个从执行引擎接收到的值赋值给工作内存中的变量 store存储作用于工作内存的变量它把工作内存中的一个变量的值传送到主内存中以便随后的write操作 write写入作用于主内存的变量它把store操作从工作内存中得到的变量的值写入主内存的变量中。 2、volatile关键字作用 1、当写一个volatile变量时JMM会把该线程对应的本地内存中的共享变量值立即刷新到主内存中。 2、当读一个volatile变量时JMM会把该线程对应的本地内存设置为无效直接从主内存中读取共享变量。 3、禁止指令重排序优化。 4、volatile关键字不能保证在多线程环境下对共享数据的操作的正确性。可以使用在自己状态改变之后需要立即通知所有线程的情况下也就是说volatile不能保证线程同步Java语言提供了一种稍弱的同步机制即volatile变量用来确保将变量的更新操作通知到其他线程这就是所谓的线程可见性当把变量声明为volatile类型后编译器与运行时都会注意到这个变量是共享的因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方因此在读取volatile类型的变量时总会返回最新写入的值所以volatile具有可见性。对一个volatile变量的读总是能看到任意线程对这个volatile变量最后的写入然后synchronized也是具有可见性。 5、volatile的原子性对任意单个volatile变量的读/写具有原子性但类似于volatile这种复合操作不具有原子性所以volatile能保证可见性不能保证原子性。 理解volatile特性的一个好方法是把对volatile变量的单个读/写看成是使用同一个监视器锁对这些单个读/写操作做了同步 class VolatileFeaturesExample {volatile long vl 0L; //使用volatile声明64位的long型变量public void set(long l) {vl l; //单个volatile变量的写}public void getAndIncrement () {vl; //复合多个volatile变量的读/写}public long get() {return vl; //单个volatile变量的读} } 假设有多个线程分别调用上面程序的三个方法这个程序在语意上和下面程序等价 class VolatileFeaturesExample {long vl 0L; // 64位的long型普通变量public synchronized void set(long l) { //对单个的普通 变量的写用同一个监视器同步vl l;}public void getAndIncrement () { //普通方法调用long temp get(); //调用已同步的读方法temp 1L; //普通写操作set(temp); //调用已同步的写方法}public synchronized long get() { //对单个的普通变量的读用同一个监视器同步return vl;} } 3 volatile和synchronized区别 1、volatile仅能使用在变量级别synchronized则可以使用在变量、方法和类级别 2、volatile读数据直接从主存中读取synchronized则是锁定当前变量只有当前线程可以访问该变量其他线程被阻塞住。 3、volatile能保证可见性不能保证原子性而synchronized则可以保证可见性和原子性 4、volatile不会造成线程的阻塞synchronized可能会造成线程的阻塞。 5、volatile标记的变量不会被编译器优化进行指令重排列synchronized标记的变量可以被编译器优化进行指令重排列。 三、JMM特性 1、原子性 就是指该操作是不可再分的。不论是多核还是单核具有原子性的量同一时刻只能有一个线程来对它进行操作。简而言之在整个操作过程中不会被线程调度器中断的操作都可认为是原子性。比如 a 1 2、可见性 可见性是指当一个线程修改了共享变量的值其他线程能够立即得知这个修改 3、 有序性 Java内存模型中有序性可归纳为这样一句话如果在本线程内观察所有操作都是有序的如果在一个线程中观察另一个线程所有操作都是无序的 是指对于单线程的执行代码执行是按顺序依次进行的。但在多线程环境中则可能出现乱序现象因为在编译过程会出现“指令重排”重排后的指令与原指令的顺序未必一致 四、java中的线程安全等级 不可变 可以是基本类型的final可以是final对象但对象的行为不会对其状态产生任何影响比如String的subString就是new一个String对象各种Number类型如BigInteger和BigDecimal等大数据类型都是不可变的但是同为Number子类型的AtomicInteger和AtomicLong则并非不可变。原因与它里面状态对象是unsafe对象有关所做的操作都是CAS操作可以保证原子性。绝对线程安全 不管运行时环境如何调用者都不需要任何额外的同步措施。相对线程安全 这是我们通常意义上的线程安全。需要保证对象单独的操作是线程安全的。比如VectorHashTablesynchronizedCollection包装集合等。线程兼容 对象本身不是线程安全的但可以通过同步手段实现。一般我们说的不是线程安全的绝大多数是指这个。比如ArrayListHashMap等。线程对立 不管调用端是否采用了同步的措施都无法在并发中使用的代码。 五、线程安全的实现方式 要实现线程安全一般至少需要两个特性原子性和可见性 1使用synchronize它本具有原子性和可见性的所以如果使用了synchronize修饰的操作那么就自带了可见性synchronized使用悲观锁来实现线程安全 2使用原子类代替基本数据类型原子类是使用乐观锁来实现线程安全多线程环境下执行a可以使用AtomicInteger类incrementAndGet()方法实现同样是使用了volatile来保证可见性使用Unsafe调用native本地方法CASCAS采用总线加锁或缓存加锁方式来保证原子性。 3 ) 使用volatile关键字,volatile不一定就有原子性比如用volatile修饰的变量进行或者--操作num,我们需要让volatile修饰的变量需要具有原子性那么我们一般可以设置在boolean类型变量上如下 volatile boolean tag true; 线程1 while(tag){}; 线程2 while(tag){}; 如果有变量自增或者自减我们可以使用原子类AtomicInteger 4使用ThreadLocal对各个线程进行隔离 可以参考我的这篇博客 Java之ThreaLocal 5我们还可以用其他的锁比如重入锁ReentrantLock 保证线程安全 6我们还可以用 临界区、互斥量、信号量 保证线程安全 参考文献 https://developer.51cto.com/art/201910/605093.htm https://www.open-open.com/lib/view/open1459412319988.html https://www.iteye.com/blog/smallbug-vip-2275743 https://juejin.im/post/5c936018f265da60ec281bcb https://blog.csdn.net/jingzi123456789/article/details/78004074
http://www.zqtcl.cn/news/758163/

相关文章:

  • 网站的静态资源服务器怎么做河北网站备案
  • php儿童摄影网站源码东莞做网站的公司哪家最好
  • 金融投资网站建设wordpress九宫格主题
  • 玉田县网站建设手机网站建设西安
  • 高质量外链网站请大学生做网站
  • 2021能看的网站不要app贴吧网站以前在百度能搜索不到了
  • 个人做网站时不要做什么样的网站百度网站排名全掉
  • 鹤岗做网站制作企业网站需要注意的事项
  • 网站建设服务器是什么意思短网址转换器
  • 红叶网站开发工作室整站优化费用
  • 温州网站建站模板建设小企业网站步骤
  • 免费企业网站我为什么电商要学网站建设
  • 建设网站员工招聘策划方案win2012 iis配置网站
  • 织梦cms 5.6网站地图图标怎么在wordpress
  • instagram wordpress北京seo学校
  • 网站优化的基本思想企业网站建设和运营
  • 网站开发电销常遇到问题怎么建立一个群
  • worldpress 建站少儿编程加盟费一般多少钱
  • 哪个公司做网站建设好九一人才网赣州招聘官网
  • 城阳区规划建设局网站哈尔滨网站建设好
  • 中小型网站建设价位无锡有哪些互联网公司
  • 网站内容收费jquery 网站框架
  • 自己建网站买玩具外贸网站如何做推广
  • 网站 配色表注册公司有什么风险
  • 网站管理员登陆后缀重庆建筑证书查询网站
  • 义乌seoseo建站外贸
  • 只做早餐的网站老网站做seo能不能重新注册
  • 门户网站开发需要多少钱百姓网网站源码
  • 网站设计要学哪些保山网站建设
  • 怎样免费设计网站建设企业网站系统源码