java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)

上篇安全唠了,不安全也有很多东西,开唠:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第1张图片
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第2张图片
两个线程用了synchronized锁之后的执行流程:
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第3张图片
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第4张图片

  • 如果多个线程对同一个共享资源(也叫临界资源,也叫缓冲区里面的资源)进行访问而不采取同步操作的话(还记得同步操作是什么吗,同步就指的是顺序执行不会交替执行),那么操作的结果是不一致的,也不一定是准确的
    • 一个程序运行多个线程本身是没有问题的,问题出在多个线程访问共享资源(多个线程读共享资源其实也没有问题),在多个线程对共享资源读写操作时发生指令交错,就会出现问题
    • 一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区
      {//++操作既有读也有写,并且counter也是一个共享资源,所以这个++操作就是一个临界区
      counter++;
      }
      
    • 竞态条件Race Condition:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件
      java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第5张图片
      比如咱们可以编写一个程序,每买一张票表示票数的变量减一,在多线程条件下,票数可能出现负数,比如负一。其原因呢,就是:
      java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第6张图片
      又比如:
      java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第7张图片

所以得想些方法,比如上一篇里面有些方法可以保证线程的安全性,挑一部分回忆回忆。
java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part6~整起(打手的自我安全修养(线程安全与线程不安全里面的那些东东、生产者与消费者模型)之线程不安全模块)_第8张图片

你可能感兴趣的:(多线程,到底有多多,高并发,到底有多高,java,安全,开发语言,线程安全)