黑马程序员技术交流社区
标题:
同步代码块 锁 傻傻分不清楚~~~~
[打印本页]
作者:
wanglv110
时间:
2016-8-13 22:40
标题:
同步代码块 锁 傻傻分不清楚~~~~
关于同步代码块的一个问题,下面的代码我简单说一下,有个De1类继承了Thread,里面有两个方法,print1和print2 , 其中, 在print1中有多条语句并加了同步代码块 , 然后在测试类里开了两个线程 , 分别掉用这两个方法 , 根据概念, 当一个线程执行print1方法时遇到同步代码块 , 那么cpu会把这个代码块里的全部执行完毕才会去执行另一个线程 , 那么下面代码不应该出现乱序的情况才对 , 但事实不是这样 , 仍然有乱序 , 为什么呢???
难道print1没有锁上吗 ? 不是说锁上了执行时就不会切换到其他线程的吗 ???
package com.heima.test;
public class Test6 {
public static void main(String[] args) {
final De1 d = new De1();
new Thread() {
public void run() {
d.print1();
}
}.start();
new Thread() {
public void run () {
d.print2();
}
}.start();
}
}
class De1 extends Thread{
public void print1() {
while (true) {
synchronized (De1.class) {
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.println();
}
}
}
public void print2() {
while(true) {
System.out.println("传智播客");
}
}
}
作者:
qetu001212
时间:
2016-8-13 23:28
因为第二个你没锁,你不锁住它,它就有随时运行的可能
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2