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(); }
}
}
解决方案 »
- 我是初学者,第一天就遇到这个问题了,
- 【推荐】一款实用的Javadoc查阅工具GroovyHelp3.2.1 GA
- JPasswordField.getPassword().toString()和new String(JPasswordField.getPassword())
- 这是什么异常,我刚学连接数据库的
- 线程隔秒打印"文字的打印效果"
- 一个命令行输入问题
- 一个class里面可否写两个样式名??
- 我参加一个单位的招聘考试,我会C#,但不会Java,遇到这个问题:
- 新手的学习java,问一下前辈们接下来的问题
- FileReader用缓存区了吗,和BufferedReader有什么差别呢
- 用JAVA与JPCAP编写一个抓IPV6的包,遇到的问题是,可以抓到IPV4的包却不能抓到IPV6的包!!!!!
- 非public class 的public方法有何用?
你也可以把那个x y 写道synchronized里面..跟这个一个效果.
就是说每次都是从内存中取变量值,而不把变量放到缓存中
synchronized可以修饰方法,对象。
而volatile可以修饰变量,包括基本类型的变量。