title: JDK多線程基礎(chǔ)筆記(1):線程的簡單實(shí)現(xiàn)與管理
date: 2014-6-29 8:00
comments: true
tags:
- thread
- runable
categories:
- Java 多線程
[TOC]
多線程實(shí)現(xiàn)
實(shí)現(xiàn)方式
- 在 Java 中要想實(shí)現(xiàn)多線程隶债,有兩種方式:
- 一種是繼承
Thread
類 - 一種是實(shí)現(xiàn)
Runable
接口
- 以上兩種方式創(chuàng)建的線程,在
run()
方法結(jié)束后梦染,自動回收該線程 - 不管是何種方式實(shí)現(xiàn)線程扑馁,每個線程都要給他一個名字憎乙,這對于問題排查系統(tǒng)監(jiān)控有幫助
- 以上的線程都沒有返回,實(shí)現(xiàn)
Callable
,有返回的線程(拋異常)弄屡,見 Future設(shè)計模式相關(guān)文章
實(shí)現(xiàn)示例
- 繼承
Thread
類實(shí)現(xiàn)
static class InThreadFromClass extends Thread {
public InThreadFromClass(String name) {
super(name);
}
@Override
public void run() {
System.out.println("繼承 Thread 實(shí)現(xiàn)線程。 線程名稱為: " + Thread.currentThread().getName());
}
}
InThreadFromClass thread = new InThreadFromClass("Thread ");
thread.start();
- 實(shí)現(xiàn)
Runable
接口實(shí)現(xiàn)
/**
* 實(shí)現(xiàn) Runnable 接口實(shí)現(xiàn)
*/
static class InThreadFromRunnable implements Runnable {
@Override
public void run() {
System.out.println("實(shí)現(xiàn) Runnable 接口實(shí)現(xiàn)逾条。 線程名稱為: " + Thread.currentThread().getName());
}
}
Thread runnable = new Thread(new InThreadFromRunnable(), "ThreadFromRunnable");
runnable.start();
線程管理
- 控制線程的數(shù)量:一個系統(tǒng)需要大量的線程來維持其應(yīng)用琢岩。線程數(shù)量過大,會耗盡 CPU 和內(nèi)存
- 每個線程的創(chuàng)建师脂、關(guān)閉需要一定的時間担孔。如果線程的數(shù)量過多,有可能出現(xiàn)創(chuàng)建銷毀線程的時間大于該線程真實(shí)工作所消耗的時間吃警,得不償失
- 線程本身也是要占用內(nèi)存空間的糕篇。大量的線程會搶占內(nèi)存資源,處理不當(dāng)酌心,可能會導(dǎo)致OOM(Out of Memory)
- GC 負(fù)擔(dān)拌消。大量的線程回收,會給 GC 帶來很大的壓力安券,延長 GC 的停頓
- 推薦使用線程池統(tǒng)一管理線程墩崩,而不是顯式的創(chuàng)建線程運(yùn)行,上面的兩種運(yùn)行方式不推薦使用侯勉。 見線程池相關(guān)博文鹦筹。