程序在并发执行时有不可再现性。找一个例子。有两个循环程序A、B,共享一个变量N。

程序在并发执行时有不可再现性。找一个例子。有两个循环程序A、B,共享一个变量N。,第1张

public class Test {

public static void main(String[] args) {

new Test()

}

public Test() {

final Data data = new Data()

new Thread() {

public void run() {

while (true) {

data.A()

try {// 线程睡眠裤芹时间,睡眠时间是随贺纯稿机的,禅孝这样更真实一点

Thread.sleep((long) (Math.random() * 1000))

} catch (InterruptedException e) {

e.printStackTrace()

}

}

}

}.start()

new Thread() {

public void run() {

while (true) {

data.B()

try {// 线程睡眠时间

Thread.sleep((long) (Math.random() * 1000))

} catch (InterruptedException e) {

e.printStackTrace()

}

}

}

}.start()

}

class Data {// 数据 *** 作

private int N = 0

public void A() {// N自加 *** 作

N = N + 1

}

public void B() {// N置0 *** 作

System.out.println("N:" + N)

N = 0

}

}

}

程序的运行环境是不一样的,程序睁蚂是在 *** 作系统这个大环境中运行的,而 *** 作系统的环境是变化配闹的,比方说系统时间。

程序执行的结果的不确定 ,比如程序要获取当前时间,或悉卖埋者读取某个易变寄存器的值,所以说程序有不可再现性。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12315371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存