マルチスレッド学習ノート2
11628 ワード
スレッドのスケジューリングと優先度の問題 A:スレッドのスケジューリングa:タイムシェアリングスケジューリングb:プリエンプトスケジューリング(Javaはこのスケジューリング方式を採用) B:スレッド優先度の取得と設定a:デフォルトは5 b:範囲は1-10
スレッドの制御(一般的な方法) A:スリープスレッド B:スレッドの現在のスレッドを追加して一時停止し、指定したスレッドの実行が終了するのを待ってから、現在のスレッドは に続きます. C:礼譲スレッドyield譲渡cpu D:バックグラウンドスレッドは、単独で実行することなく、他の非デーモンスレッドの実行が終了すると、 を自動的に終了するデーモンスレッドとして設定. E:終端スレッド(把握)
public class ThreadPriority extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
public static void main(String[] args) {
ThreadPriority tp1 = new ThreadPriority();
ThreadPriority tp2 = new ThreadPriority();
ThreadPriority tp3 = new ThreadPriority();
tp1.setName(" ");
tp2.setName(" ");
tp3.setName(" ");
//
// System.out.println(tp1.getPriority());
// System.out.println(tp2.getPriority());
// System.out.println(tp3.getPriority());
//
// tp1.setPriority(100000);
//
tp1.setPriority(10);
tp2.setPriority(1);
tp1.start();
tp2.start();
tp3.start();
}
}
スレッドの制御(一般的な方法)
public class ThreadSleep extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x + ", :" + new Date());
//
// , 1
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/*
*
* public static void sleep(long millis)
*/
public class ThreadSleepDemo {
public static void main(String[] args) {
ThreadSleep ts1 = new ThreadSleep();
ThreadSleep ts2 = new ThreadSleep();
ThreadSleep ts3 = new ThreadSleep();
ts1.setName(" ");
ts2.setName(" ");
ts3.setName(" ");
ts1.start();
ts2.start();
ts3.start();
}
}
public class ThreadJoin extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
}
public class ThreadJoinDemo {
public static void main(String[] args) {
ThreadJoin tj1 = new ThreadJoin();
ThreadJoin tj2 = new ThreadJoin();
ThreadJoin tj3 = new ThreadJoin();
tj1.setName(" ");
tj2.setName(" ");
tj3.setName(" ");
tj1.start();
try {
tj1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
tj2.start();
tj3.start();
}
}
public class ThreadYield extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
Thread.yield();
}
}
}
public class ThreadYieldDemo {
public static void main(String[] args) {
ThreadYield ty1 = new ThreadYield();
ThreadYield ty2 = new ThreadYield();
ty1.setName(" ");
ty2.setName(" ");
ty1.start();
ty2.start();
}
}
public class ThreadDaemon extends Thread {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(getName() + ":" + x);
}
}
}
public class ThreadDaemonDemo {
public static void main(String[] args) {
ThreadDaemon td1 = new ThreadDaemon();
ThreadDaemon td2 = new ThreadDaemon();
td1.setName(" ");
td2.setName(" ");
//
td1.setDaemon(true);
td2.setDaemon(true);
td1.start();
td2.start();
Thread.currentThread().setName(" ");
for (int x = 0; x < 5; x++) {
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
public class ThreadStop extends Thread {
@Override
public void run() {
System.out.println(" :" + new Date());
// 10 , ,
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// e.printStackTrace();
System.out.println(" ");
}
System.out.println(" :" + new Date());
}
}
public class ThreadStopDemo {
public static void main(String[] args) {
ThreadStop ts = new ThreadStop();
ts.start();
// ,
try {
Thread.sleep(3000);
// ts.stop();
ts.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}