先上代码来看两者区别
package test;
public class ThreadTest {
public static void main(String args[]) {
ThreadSync syncThread1 = new ThreadSync();
ThreadSync syncThread2 = new ThreadSync();
Thread thread1 = new Thread(syncThread1, "SyncThread1");
Thread thread2 = new Thread(syncThread2, "SyncThread2");
thread1.run();
thread2.start();
}
}
package test;
public class ThreadSync implements Runnable{
public void run() {
function();
}
public synchronized static void function() {
for (int i = 0; i < 5; i++) {
try {
System.out.println(Thread.currentThread().getName() + ":" + i);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
main:0
main:1
main:2
main:3
main:4
SyncThread2:0
SyncThread2:1
SyncThread2:2
SyncThread2:3
SyncThread2:4
这个结果就已经说明了问题。
先从表面上看:run就是一个普通的方法,还是调用的主线程,并没有创建制定的新线程。start是线程执行的方法,创建进线程。
再从底层看:
![](https://img.haomeiwen.com/i13963670/7f38fe89ca28965a.png)
![](https://img.haomeiwen.com/i13963670/eb25c2f7788fbee3.png)
![](https://img.haomeiwen.com/i13963670/3a9f907df6ae1bf9.png)
![](https://img.haomeiwen.com/i13963670/74c836efc352567a.png)
网友评论