50,504
社区成员
发帖
与我相关
我的任务
分享
public class VolatileLearn {
public static void main(String[] args) {
NumberRange num = new NumberRange();
num.setLower(0);
num.setUpper(5);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setLower(4);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setUpper(3);
}
}).start();
}
}
package concurrent;
public class NumberRange {
private int lower, upper;
public int getLower() { return lower; }
public int getUpper() { return upper; }
public void setLower(int value) {
if (value > upper)
throw new IllegalArgumentException(value+" value > upper"+upper);
lower = value;
}
public void setUpper(int value) {
if (value < lower)
throw new IllegalArgumentException(value+" value < lower"+lower);
upper = value;
}
}
public static void main(String[] args) {
NumberRange num = new NumberRange();
num.setLower(0);
num.setUpper(5);
while(true) {
try {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setLower(4);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setUpper(3);
}
}).start();
} catch (Exception e) {
if (e.toString().indexOf("4 > 3") > 0) {
System.out.println("raise exeption:4 > 3");
throw e
}
}
}
}
package test.gt50;
public class VolatileLearn {
public static void main(String[] args) {
final NumberRange num = new NumberRange();
num.setLower(0);
num.setUpper(5);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setLower(4);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
num.setUpper(3);
}
}).start();
}
}
class NumberRange {
private int lower, upper;
public int getLower() { return lower; }
public int getUpper() { return upper; }
public void setLower(int value) {
try {
Thread.sleep(2000l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (value > upper)
throw new IllegalArgumentException(value+" value > upper"+upper);
lower = value;
System.out.println("set lower in_value : " + value + ", now : [" + lower + "_" + upper + "]");
}
public void setUpper(int value) {
if (value < lower)
throw new IllegalArgumentException(value+" value < lower"+lower);
try {
Thread.sleep(3000l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
upper = value;
System.out.println("set upper in_value : " + value + ", now : [" + lower + "_" + upper + "]");
}
}