java

位置:IT落伍者 >> java >> 浏览文章

Java中对线程间的变量访问也需要同步控制


发布日期:2021年11月02日
 
Java中对线程间的变量访问也需要同步控制

一个简单的计数器本来以为不需要同步保护后来发现不行还是得加上程序

public class TestMain {

int i = ; //计数器初始值为

public static void main(String[] args) {

TestMain c = new TestMain();

Worker x = new Worker(c);

for (int i=; i<; i++) { //个线程

new Thread(x)start();

}

while (true) { //每隔一秒中输出计数器的值

Systemoutprintln(ci);

try {

Threadsleep();

} catch (InterruptedException e) {

}

}

}

}

class Worker implements Runnable {

TestMain c;

public Worker(TestMain c) {

thisc = c;

}

public void run() {

try {

Threadsleep((int)(Mathrandom() * )); //随机Sleep一段时间

} catch (InterruptedException e) {

}

ci++; //计数器自增 问题在这里 并发写入

}

}

上面的程序%的几率结果是其余的是

ci++一句需要并发保护

本来我以为Java里面++是原子的呢呵呵

解决方法加上同步控制或者使用JDK里面新增加的AtomicInteger类

               

上一篇:java 编程模式---桥接模式(Bridge Patter)

下一篇:JAVA认证:多线程的批量线程同步处理方案