正在運行的程序就是進程java
單線程不會出現安全問題,可是效率堪憂安全
問什麼要繼承Thread類:
由於Thread類是線程類,繼承至Thread的類,能夠爲寫在run()的代碼塊提供一個模板。因此run是提供要運行的代碼,start()纔是開啓線程。多線程
線程的內存:
內存會在開闢一個棧區,而後讓run()進入到這個棧。棧內存都是線程私有的
異步
public String getName():這是Thread的方法,並非子類的方法
線程
public static Thread currentThread()
code
public void setName(String name)用子類對象去調用這個方法
對象
public void sleep(long second)
==這個方法不能拋出異常,由於父類Thread不能拋出,因此子類也不能拋==繼承
public subRunnable implements Runnable{ public void run(){ } } public static void main(String[] args){ SubRunnable sr = new SubRunnable(); Thread th = new Thread(sr); th.start(); }
//匿名內部類是沒有子類的 //繼承方式 xxxclass extends Thread{public void run()} //直接new Thread,這個匿名內部類就是Thread的子類 new Thread(){ public void run(){ }.start(); } //匿名內部類實現類接口引用 Runnable r = new Runnable(){ public void run(){ }; new Thread(r).start; } new Thread(new Runnable(){ public void run(){ } }).start();
線程池就是用來存儲線程的容器,當線程沒又試用的時候就會將線程回收可是不關閉線程,能夠重複使用這個線程,節省掉反覆建立銷燬線程的內存開銷。sun公司在JKD1.5以後就提供了線程池的API接口
線程池這個容器都是由線程工廠
生產的進程
|--Utils |--Executors public static ExecutorService newFixedThreadPool(int nThreads) ExecutorService:線程池接口 Future<?> submit(Runnable task) Future<?> submit(Callable<?> task) 返回的是接口實際上是說返回的是這個接口的實現類ThreadPoolExecutor,讓這個類去實現run
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(new Runnable()); es.shutdown(); //關閉線程池
Runnable
接口存在的問題:
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(new Callable<?>()); //拿到返回值的方式Futere接口 Future<T> f = es.submit(new Callable<T>()); es.shutdown(); //關閉線程池
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(task); es.submit(task); //能夠往構造器裏面傳入參數