• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

为什么我的synchronized依然不能保持线程安全?

package com.imooc.concurrent.test;


public class Test {
        public static void main(String[] args)  {
        final aquryI a = new aquryI();
    while(true){   
        new Thread("Thread A") {
            public void run() {
                a.read();
                a.write();
                a.read();
                try {
                                        Thread.sleep(2000);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
            };
        }.start();
         
         
        new Thread("Thread B") {
            public void run() {
                a.read();            
                try {
                                        Thread.sleep(2000);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }      
            };
        }.start();
        System.out.println("\n");
        try {
                        Thread.sleep(2000);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
    }  
        }
        }


class aquryI {
   
        private volatile static int i;     
   
        public synchronized void write(){
           i +=10;               
           System.out.println(Thread.currentThread().getName());
        
    }
    public synchronized void read(){
            System.out.println(Thread.currentThread().getName());
            System.out.println(i);
    }
}


运行结果如下:
Thread A
0
Thread A
Thread A
10




Thread B
10




Thread A
10
Thread A
Thread A
20
Thread B
20




Thread A
20
Thread A
Thread A
30
Thread B
30




Thread A
30
Thread A
Thread A
40
Thread B
40




Thread A
40
Thread A
Thread A
50
Thread B
50




Thread A
50
Thread A
Thread A
60
Thread B
60




Thread A
60
Thread B
60
Thread A
Thread A
70




Thread A
70
Thread A
Thread A
80
Thread B
80




Thread A
80
Thread A
Thread A
90
Thread B
90




Thread A
90
Thread B
90
Thread A
Thread A
100
.....

Thread A
120
Thread B
120
Thread A
Thread A
130




Thread A
130
Thread B
130
Thread A
Thread A
140




Thread A
140
Thread A
Thread A
150
Thread B
150




Thread A
150
Thread A
Thread A
160
Thread B
160




Thread B
160
Thread A
160
Thread A
Thread A
170
虽然大部分时候可以保证  但是有时候还是会出现A B交替运行的现象 这是为什么?

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!