本帖最后由 龙秋地 于 2012-6-20 21:02 编辑
楼主我刚开始也没弄明白是怎么回事但是我在两个地方加了一下System.out.println(count);
我貌似明白了主函数的运行顺序.
第一个是在method2()方法里count=200;下面加的.
第二个是在主函数最后加的.具体代码你可以自己试试.
- public class Demo{
- public static int count = 0;
- public static synchronized void method1(){
- count=100;
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("count="+count);
- }
-
- //public static void method2(){
- public static synchronized void method2(){
- count=200;
- System.out.println(count);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- }
-
- public static void main(String[] args){
- Thread myThread = new Thread(new MyRunnable());
- myThread.start();
-
-
- Demo.method2();
- System.out.println("main() count="+count);
- //如果后调用的是method2() 则打印出的是 main() count=200
- //说明先执行了method2()方法,主线程休眠之后执行了 method1()方法,使count=100 MyThread线程休眠三秒,主线程
- //执行,打印main() count=100,然后3秒后执行MyThread 打印count=100
-
- System.out.println(count);
-
- }
- }
- class MyRunnable implements Runnable{
- public void run(){
- Demo.method1();
- }
- }
复制代码 运行结果是这个
这就说明在主函数运行时,开启线程语句和Demo.method2()应该是是在method1()之前运行的,
我已经反复试验多次,每次都是先打印出200,也许这就是多线程的作用.主函数是一个线程你自己
又建立了一个线程,这个都是同时在执行的,但是你的线程由于休眠,所以当主函数已经运行三个除了
你自己建立的线程以外,还等了三秒才输出count=100的. |
|