关于同步代码块的一个问题,下面的代码我简单说一下,有个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("传智播客");
}
}
}
|