结果如下:
前数值是:10
前数值是:10
后数值是:9
后数值是:8
前数值是:8
前数值是:8
后数值是:7
后数值是:6
前数值是:6
前数值是:6
后数值是:5
后数值是:4
前数值是:4
前数值是:4
后数值是:3
后数值是:2
前数值是:2
前数值是:2
后数值是:1
后数值是:0
前数值是:0
前数值是:0
这个代码里我建了两个线程,线程都传入同样的数据也就是同一个资源即共享资源了,运行程序,程序的结果都是正常的,没有数据违反了我们设定的约束条件既然还在运行。我们在看一段代码:
package cn.com.sxia;
public class MutiMethodThread {
private volatile int i = 10;
public boolean isExit() {
if (i == 0)
return false;
else
return true;
}
public void release() {
System.out.println("前数值是:" + i);
--i;
System.out.println("后数值是:" + i);
}
}
package cn.com.sxia;
public class MutiMethodThreadTester extends Thread {
private volatile MutiMethodThread mmt;
public MutiMethodThreadTester(MutiMethodThread mmt){
this.mmt = mmt;
start();
}
public void run(){
while(true){
mmt.release();
yield();
}
}
public static void main(String[] args) {
MutiMethodThread smt = new MutiMethodThread();
new MutiMethodThreadTester(smt);
new MutiMethodThreadTester(smt);
}
}
结果如下:
前数值是:-18572
后数值是:-18573
前数值是:-18573
后数值是:-18574
前数值是:-18574
后数值是:-18575
前数值是:-18575
后数值是:-18576
前数值是:-18550
后数值是:-18577
前数值是:-18577
后数值是:-18578
前数值是:-18578
后数值是:-18579
前数值是:-18579
后数值是:-18580
。。。。。。。。。
当线程run方法里调用了对象两个不同方法也就产生了线程冲突的问题了。