大范文网 - 每天发现一点点
每天学习一点点!
  • 思想汇报范文
  • 思想汇报格式
  • 3000字
  • 2000字
  • 1500字
  • 1000字
  • 积极分子
  • 教师思想汇报
  • 部队思想汇报
  • 研究生
  • 十八大
  • 党员思想汇报
  • 入党思想汇报
  • 转正思想汇报
  • 大学生
  • 两会思想汇报
  • 党课思想汇报
  • 党校思想汇报
  • 团员思想汇报
  • 个人思想汇报
  • 工作思想汇报
  • 季度思想汇报
  • 建军节思想汇报
  • 缓刑思想汇报
  • 科学发展观
  • 一月思想汇报
  • 二月思想汇报
  • 三月思想汇报
  • 四月思想汇报
  • 五月思想汇报
  • 六月思想汇报
  • 七月思想汇报
  • 八月思想汇报
  • 九月思想汇报
  • 十月思想汇报
  • 十一月
  • 十二月
  • 当前位置:大范文网 > 思想汇报 > 十二月 >

    Java多线程同步问题分析_多线程同步访问一个文件问题

    分类:十二月 时间:2019-05-06 本文已影响

      摘要:针对java多线程中,多个线程共享数据时存在的问题进行详细分析,结合实例阐述了java同步机制的重要性。关键词:JVM;进程;多线程;共享数据;同步机制   中图分类号:TP312 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.04.010
      while(flag)
      {
      if(tick>0)
      {System.out.println(currentThread(). getName()+”sale:”+tick--);} if(tick==0)
      flag=false;}
      假设现在卖出只剩1张票,如果售票员1执行到if(tick>0),但还没执行System.out.println(currentThread(). getName()+"sale:"+tick--);这条语句时,CPU资源轮流到售票员2,但是tick还是1,那么售票员继续卖票,打印票并且tick--,tick为0,当CPU资源轮流到售票员1时,售票员继续打印票,那么打印的就是0,这样就出现严重错误,没有票了还在继续卖票,并且票号为0,不符合用户需求也不符合软件设计的要求。怎样测试这个程序呢?只要在if语句块中加Thread.sleep(10);这条语句,即
      while(flag)
      {
      if(tick>0)
      { Thread.sleep(10);//等待10毫秒
      System.out.println(currentThread().
      getName()+"sale:"+tick--);} if(tick==0)
      flag=false;}
      让程序在此等待10毫秒,就发现问题所在了。问题的原因是当多条语句在操作同一个线程共享数据时,一个线程线程对多条语句只执行了一部分,还没有执行完,另外一个线程就参与进来执行,导致共享数据发生错误。
       3 解决问题
      出现多线程抢占资源的问题是很多的,因为电脑运行的时候,会启动多个进程,而线程是进程的最小运行单元,并且一个进程间也可能有多个线程[4]。所以必然会有多个线程抢占CPU资源,这样就导致上面的问题发生了。要解决这个问题,对多条操作共享数据的语句,只能让一个线程全部执行完,在
       4 总结
      一个应用软件启动时,肯定会同时运行多个线程,多个线程在执行共享数据时,就会产生不可预料的错误,那么就需要用Java提供的同步机制来解决。同步的前提:第一,必须有两个或两个以上的线程;第二,必须是多个线程使用相同的代码块;第三,必须保证同步中只能有一个线程在运行。这就需要用JVM提供的synchronized同步机制,来解决多线程同步中的问题,保证用户需求和软件设计的正确。提供同步有好处也有弊端,好处是解决了多线程安全问题,弊端是消耗资源。

    相关热词搜索:多线程 同步 分析 Java

    Java多线程同步问题分析_多线程同步访问一个文件问题相关文章