黑马程序员技术交流社区

标题: 同步代码块 锁 傻傻分不清楚~~~~ [打印本页]

作者: 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