A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


评分

参与人数 1黑马币 +2 收起 理由
r1503882525 + 2 提问认真,赞一个

查看全部评分

1 个回复

倒序浏览
因为第二个你没锁,你不锁住它,它就有随时运行的可能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马