- 進程與線程的概念
- Java中線程的基本操作
- Java開發多線程應用
進程與線程
進程
- 程序(任務)的執行過程 (動態性)
- 持有資源(共享內存,共享文件)和線程
線程
- 是系統中最小的執行單元
- 用一個進程中有多個線程
- 線程共享進程的資源
線程的交互
(多個線程需要相互通信才能正常的工作)
- 同步:需要線程之間相互的協作完成某些任務
- 互斥:資源有限,需要搶佔和競爭
Java中線程的常用方法介紹
1. Java語言對線程的支持
- class Thread
- interface Runnable
- public void run()
public void run()提供了線程實際工作的代碼
2. Tread常用方法
public class Actor extends Thread {
public void run() {
System.out.println(getName()+"是一個演員!");
int count = 0;
boolean keepruning = true;
while (keepruning) {
System.out.println(getName()+"登臺演出:"+(++count));
if(count == 100) {
keepruning = false;
}
if(count%10 == 0) {
try {
Thread.sleep(1000);//1s
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(getName()+"演出結束");
}
public static void main(String[] args) {
Thread actor = new Actor();
actor.setName("Mr. Thread");
actor.start();
Thread actressThread = new Thread(new Actress(),"Ms. Runnable");
actressThread.start();
}
}
class Actress implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"演出開始了");
int count = 0;
boolean boo = true;
while (boo) {
System.out.println(Thread.currentThread().getName()+"登臺演出:"+(++count));
if(count == 100) {
boo = false;
}
if(count%10 == 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(Thread.currentThread().getName()+"演出結束了");
}
}
線程的正確停止
如何正確的停止Java中的線程
- 通常不使用shop()方法,會使線程戛然而止,對數據處理等不利
- 通常也不使用interrupt()方法,interrupt()方法初衷並不是用於停止線程
通常使用退出標誌
volatile boolean keepRunning = true; @Override public void run() { while(keepRunning) { //發動5連擊 for(int i = 0;i < 5;i++) { System.out.println(Thread.currentThread().getName()+"進行攻擊"+"["+i+"]"+"次!"); //讓出了處理時間,下次讓誰進攻還不一定呢! Thread.yield(); } } System.out.println(Thread.currentThread().getName()+"結束戰鬥!"); }