都这么说“加上synchronized关键字修饰的函数,在同一时刻内只能允许一个线程执行被synchronized修饰的函数,必须要等到这个线程执行完毕后,才允许其他线程执行…………
看了很多例子,还是不明白,有没有一个反例,就是如果不使用synchronized修饰了,结果会有什么不同。
这个是我举的例子:public class Demo extends Thread
{
public void run()
{
for (int i = 0; i < 10; i++)
System.out.print(i + " ");
}
public static void main(String[] args)
{
Demo D1 = new Demo();
Demo D2 = new Demo();
D1.start();
D2.start();
}
}
按照我的理解,应该先让D1(或D2)从1打印到9,然后再让D2(或D1)打印。结果却不是,而是轮流打印。麻烦指出。
看了很多例子,还是不明白,有没有一个反例,就是如果不使用synchronized修饰了,结果会有什么不同。
这个是我举的例子:public class Demo extends Thread
{
public void run()
{
for (int i = 0; i < 10; i++)
System.out.print(i + " ");
}
public static void main(String[] args)
{
Demo D1 = new Demo();
Demo D2 = new Demo();
D1.start();
D2.start();
}
}
按照我的理解,应该先让D1(或D2)从1打印到9,然后再让D2(或D1)打印。结果却不是,而是轮流打印。麻烦指出。
解决方案 »
- 初学者,关于强制类型转换问题
- JAVA socket编程问题
- ==是比较内存相等不,我现在是提问的是,a == TestString.a为TRUE,就是说static String a = "hello";与String a = "hello";内存相等。那static String b = "Hello";和Str
- 一个servlet错误 Can't find bundle for base name LocalStrings, locale zh_CN
- Java的基础问题,请一些大虾帮助一下:)
- 100分:紧急ppmm叫帮忙弄小程序!
- 就这三行代码的问题?
- 关于JTextPane自动滚屏的问题。(up有分了)
- 安装JBuilder 求助
- java string 的地址:为什么s1与s3的哈希值相等
- 菜鸟困惑:Java求质数算法
- httpclient返回302后,其location的值为./ 跳转出错,请大侠帮着看看是什么原因。
{
public void run()
{
synchronized(this)
{
System.out.println(" "+Thread.currentThread().getName());
for (int i = 0; i < 10; i++)
{
System.out.print(i + " ");
}
System.out.println();
}
}
public static void main(String[] args)
{
Demo D1 = new Demo();
new Thread(D1).start();
new Thread(D1).start();
//Demo D2 = new Demo();
//D1.start();
//D2.start();
}
}
public class Demo extends Thread {
public void run() {
synchronized (Demo.class) {
for (int i = 0; i < 10; i++)
System.out.println(this.getName() + " " + i + " ");
}
} public static void main(String[] args) {
Demo D1 = new Demo();
Demo D2 = new Demo();
D1.start();
D2.start();
}
}
两者结合体会一下比较好
线程A:计算s = a + b;
线程B:计算m = b + a;
如果线程AB在访问资源ab时,不加同步,有可能造成死锁...
1、你启动了两个线程,每个线程里面有一个for循环,出现轮流打印的原因是,cpu首先分配资源给了d1或d2,然后运行了一次输出,接着cup切换到了另个线程,又运行了一次输出,然后不断的切换
2、cpu分配时间是随即的,你把循环改大点,一定会出现各种结果,可能第一个线程循环了n次之后再切换给第二个线程。。
3、修改的方法,4楼是正解。
object 可以看作是 守卫员
object 的监视器 可以看作是 守卫手上那张唯一的通行证
线程 可以看作是 需要从这里过去的人