Sự khác nhau giữa Thread.start và Thread.run
Java core 2016
package Thread;
public class Demo {
public static void main(String[] args) {
Thread thread = new Thread() {
public void run() {
try {
System.out.println("Bat dau");
for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
System.out.println(i);
}
System.out.println("Ket thuc");
} catch (Exception e) {
// TODO: handle exception
}
}
};
// Chay 2 lan start () thi loi error
// Thread.start ();
// Thread.start ();
// Chay 2 lan voi run () van chay good
thread.run();
thread.run();
}
}
package com.demo.two;
class Multi extends Thread {
public void run() {
System.out.println("running...");
}
public static void main(String args[]) {
Multi t1 = new Multi();
//Chay 2 lan start thi loi.
t1.start();
t1.start();
}
}
package com.demo.two;
class Multi extends Thread {
public void run() {
System.out.println("running...");
}
public static void main(String args[]) {
Multi t1 = new Multi();
t1.run();//Chạy nhưng không tạo stack mới
}
}
Cả 2 phương thức này đều có chức năng gọi đến phương thức run() của thread và thực thi các dòng code bên trong phương thức này. Vậy sự khác nhau giữa chúng là:
- Khi chúng ta gọi phương thức start(), 1 thread mới sẽ được tạo và code trong phương thức run() sẽ được thực thi trong thread mới này. Nếu chúng ta gọi phương thức run(), không có thread mới nào được tạo và code trong run() sẽ được thực thi tại thread hiện tại.
- Ngoài ra, chúng ta không thể gọi phương thức start() 2 lần trên đối tượng thread, việc này sẽ quăng ra lỗi IllegalStateException trong Java. Trong khi đó, chúng ta có thể gọi phương thức run() 2 lần trên đối tượng thread.
0 nhận xét:
Post a Comment