a 是全局变量 肯定是共享的,
for(int i=0;i<20;i++) 20次执行太快了
你把数调大一点,执行看下效果
for(int i=0;i<20;i++) 20次执行太快了
你把数调大一点,执行看下效果
解决方案 »
- 小菜鸟写了个计算器程序,求大大指点还有没有问题
- 都说在循环外部定义对象效率高,我怎么测试不是呢?
- FileOutputStream的FileWrite方法默认的是不是找不到文件就自动创建一个文件啊
- java 综测评分管理系统
- 简单且根基的问题:JSP、ASP 都不是语言,而是一种技术,是这样吗?谢谢大家!
- 请问一下,我用javamail发邮件连续发了两封邮件,为什么只有第一封邮件收到啊?
- java socket客户端上传文件过程中断线,客户端重连,并且服务端继续接收数据
- 请问哪儿能下载到jb的书?免费的。
- <<java程序设计入门教程>>上的一个问题
- 实现最大化
- java 或swing 关于键盘监听
- 请问在swing布局中,如何使CardLayout 布局的lpanel切换卡片.
for(int i=1;i<20;i++)
public class Machine implements Runnable {
private int a = 1; // t1和t2是否共享这个a? public void run() {
a++;
System.out.println(a); } public static void main(String[] args) throws InterruptedException {
Machine machine = new Machine();
Thread t1 = new Thread(machine);
Thread t2 = new Thread(machine);
t1.start();
t2.start();
}
}
结果:
2
3
a+=i;
Thread.yield();
a-=i;
这三句交替执行了。其实a的值是有改变的,但是每次在打印的时候a又修改回1了。
yield方法造成的结果。
如果你为了达到你目的你可以修改成#7的代码。
关于多线程概念,http://www.itzlk.com/io/index.jhtml讲的比较详细
这个就不是个靠谱的东西。不要考虑多线程先后顺序的问题,没准的。使用这个方法是为了让CPU有时间thread scheduling。这个可以解释为什么不同电脑打出来的不一样。
t1和t2是共享这个a,其他人已经解释清楚了。
public class Machine implements Runnable
{
private int a=1; //t1和t2是否共享这个a?
public void run()
{
for(int i=0;i<20;i++)
{
System.out.println(Thread.currentThread().getName()+
","+"a+"+i+"="+(a+=i));
Thread.yield();
System.out.println(Thread.currentThread().getName()+
","+"a-"+i+"="+(a-=i));
System.out.println(Thread.currentThread().getName()+","+"a="+a);
}
}
public static void main(String[] args) throws InterruptedException
{
Machine machine=new Machine();
Thread t1=new Thread(machine);
Thread t2=new Thread(machine);
t1.start();
t2.start();
}
}运行后发现打印结果中有以下内容:
Thread-0,a+1=2
Thread-1,a+1=3说明共享了,谢谢大家!