黑马程序员技术交流社区
标题:
线程的一些小问题
[打印本页]
作者:
长石
时间:
2014-1-14 17:17
标题:
线程的一些小问题
帮我理解一下线程的小问题
import java.util.*;
import java.text.*;
public class Thread01
{
public static void main(String []args)throws Exception{
Test test = new Test();
Thread t = new Thread(test);
t.start(); //启动run 调用m1
//如果 这里加个 Thread.sleep(); 那么就m1先执行
test.m2(); //主线程 调用 m2
//问题:为什么每次运行都先执行m2 而且我把他俩优先级改了 还是每次都是 m2先执行,
}
}
class Test implements Runnable
{
public void run(){
m1();
}
public synchronized void m1(){
System.out.println("m1........");
}
public synchronized void m2(){
System.out.println("m2.........");
}
}
复制代码
作者:
强子
时间:
2014-1-14 17:40
因为你使用了同步了啊,两个方法都用synchronized 来修饰,这时在多个线程中同一时间点只能有一个方法运行
你在main中new 了一个Thread 并调用了start方法开启了一个线程 这时这个线程和main所在的线程是同时执行的,这就得看谁先进入test的两个方法中了
可以看看Thead的源码中start方法,其实里面并不是直接调用test的run方法,调用之前还要进行很多操作,这些操作当然会占用一定的时间,所以你new的线程比main所在线程后进入了test的方法,他就只能等待main执行完毕后才能执行。
而当你让main线程sleep的时候 你new的Thread有了足够的时间进入test的方法,那main也就只能等待他执行完了。
希望对你有所帮助。
作者:
淡夜清风
时间:
2014-1-14 17:43
你的main()相当于主线程。
当你启动新的线程 t.start();时,你的主线程仍然在运行,而且线程启动大概需要几毫秒,
这个时间里main()线程仍然在向下执行test.m2();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2