class ViolentAccessDemo
{
public static void main(String args[]) throws InterruptedException
{
ViolentObject violentObject = new ViolentObject();
Thread thread1 = new Thread(new ThreadAccess(violentObject));
Thread thread2 = new Thread(new ThreadAccess(violentObject));
// thread2.setPriority(Thread.MAX_PRIORITY);
thread1.start();
thread2.start();
for(int i=0;i<100;i++)
{
violentObject.print();
Thread.sleep(500);
}
}
}
class ViolentObject
{
volatile long x; //这里加不加volatile我觉得没什么区别,有高手说加了x与y之间差别在4之内,但实际不是
volatile long y; //这是为什么??
public void increase()
{
x++;
y++;
}
public void print()
{
System.out.println("x="+x+", "+"y="+y);
if(x<y)
System.out.println("x<y");
}
}
class ThreadAccess implements Runnable
{
private ViolentObject violentObject;
public ThreadAccess(ViolentObject vob)
{
System.out.println("this is constructor of ThreadAccess");
this.violentObject = vob;
}
public void run()
{
while(true)
{
violentObject.increase(); }
}
}
{
public static void main(String args[]) throws InterruptedException
{
ViolentObject violentObject = new ViolentObject();
Thread thread1 = new Thread(new ThreadAccess(violentObject));
Thread thread2 = new Thread(new ThreadAccess(violentObject));
// thread2.setPriority(Thread.MAX_PRIORITY);
thread1.start();
thread2.start();
for(int i=0;i<100;i++)
{
violentObject.print();
Thread.sleep(500);
}
}
}
class ViolentObject
{
volatile long x; //这里加不加volatile我觉得没什么区别,有高手说加了x与y之间差别在4之内,但实际不是
volatile long y; //这是为什么??
public void increase()
{
x++;
y++;
}
public void print()
{
System.out.println("x="+x+", "+"y="+y);
if(x<y)
System.out.println("x<y");
}
}
class ThreadAccess implements Runnable
{
private ViolentObject violentObject;
public ThreadAccess(ViolentObject vob)
{
System.out.println("this is constructor of ThreadAccess");
this.violentObject = vob;
}
public void run()
{
while(true)
{
violentObject.increase(); }
}
}
解决方案 »
- 字节数组转成指定编码的字符串的问题
- JDK安装不上!怎么解决?
- freemarker简单语法问题但是没用过所以问问大家啊。55555
- 接口的问题。 帮帮我看看大家。
- 高手进进 非常感谢 TestArea 显示问题 滚动条能不能显示在最下端
- 关于使用java.util.GregorianCalendar类的奇怪问题---烦请高手给以解答
- 为什么不能用"Insert"语句向数据库中插入大字段(比如Image)??
- 大家帮个忙,有关JAVA输出。
- 请问GirdBagLayout里的一个cell是多大?
- 100分求weblogic的问题
- 用JAVA与JPCAP编写一个抓IPV6的包,遇到的问题是,可以抓到IPV4的包却不能抓到IPV6的包!!!!!
- 非public class 的public方法有何用?
你也可以把那个x y 写道synchronized里面..跟这个一个效果.
就是说每次都是从内存中取变量值,而不把变量放到缓存中
synchronized可以修饰方法,对象。
而volatile可以修饰变量,包括基本类型的变量。