進程與線程的區(qū)別
進程
進程簡單的來說就是在內(nèi)存中運行的應用程序乔夯,一個進程可以啟動多個線程。
比如在windows中一個運行EXE文件就是一個進程珊肃。
線程
同一個線程中的進程共用相同的地址空間绘迁,同時共享進程所擁有的內(nèi)存和其他資源。
線程Demo-繼承Thread類
首先我們我們繼承java.lang.Thread類來創(chuàng)建線程凑队。
public class TestThread {
public static void main(String[] args) {
System.out.println("主線程ID是:" + Thread.currentThread().getId());
MyThread my = new MyThread("線程1");
my.start() ;
MyThread my2 = new MyThread("線程2") ;
/**
* 這里直接調(diào)用my2的run()方法。
*/
my2.run() ;
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("名字:" + name + "的線程ID是="
+ Thread.currentThread().getId());
}
}
主線程ID是:1
名字:線程2的線程ID是=1
名字:線程1的線程ID是=9
線程Demo-實現(xiàn)Runnable接口
除了繼承java.lang.Thread類之外蜂科,我們還可以實現(xiàn)java.lang.Runnable接口來創(chuàng)建線程顽决。
public class TestRunnable {
public static void main(String[] args) {
System.out.println("主線程的線程ID是"+Thread.currentThread().getId());
MyThread2 my = new MyThread2("線程1") ;
Thread t = new Thread(my) ;
t.start() ;
MyThread2 my2 = new MyThread2("線程2") ;
Thread t2 = new Thread(my2) ;
/**
* 方法調(diào)用,并不會創(chuàng)建線程导匣,依然是主線程
*/
t2.run() ;
}
}
class MyThread2 implements Runnable{
private String name ;
public MyThread2(String name){
this.name = name ;
}
@Override
public void run() {
System.out.println("線程"+name+"的線程ID是"+Thread.currentThread().getId());
}
}
主線程的線程ID是1
線程線程2的線程ID是1
線程線程1的線程ID是9
優(yōu)雅的終止線程
有三種方法可以終止線程,如下:
- 使用退出標識茸时,使線程正常的退出贡定,也就是當run()方法完成后線程終止。
- 使用stop()方法強行關閉可都,這個方法現(xiàn)在已經(jīng)被廢棄缓待,不推薦使用
- 使用interrupt()方法終止線程。