码迷,mamicode.com
首页 > 编程语言 > 详细

java解惑--多线程

时间:2015-04-08 09:11:47      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

观察一段代码,是否可以打印出Pingpang:


import java.util.*;
public class Seventysixth{
        public static synchronized void main(String[] args){
                Thread t = new Thread(){
                        public void run(){ pang();}
                };
                t.run();
                //t.start();
                System.out.print("Ping");
        }
        public static synchronized void pang(){
                System.out.println("pang");
        }
}

打印什么?

pang

Ping

       在一个同步化的静态方法执行之前,他会获取与它的class对象相关联的一个管程(monitor)锁,所以在上面的程序中,主线程会在创建第二个线程之前获得与class相关联的那个锁。只要主线程占着那个锁,第二个线程就不可能执行同步化的静态方法。具体来讲,在main方法打印了Ping并且结束之后,第二个线程才能执行pang方法。

       按照上述所说,不是应该打印出Pingpang吗?

       思考下,是否启动了t线程?

        t.run和t.start的区别。

        t.run只是单纯的一个方法调用,而不是启动线程!!!!

        修改成t.start()之后,打印出了理想的结果!

java解惑--多线程

标签:

原文地址:http://blog.csdn.net/havedream_one/article/details/44935623

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!