0039 Java學習筆記-多線程-線程控制、線程組。本站提示廣大學習愛好者:(0039 Java學習筆記-多線程-線程控制、線程組)文章只能為提供參考,不一定能成為您想要的結果。以下是0039 Java學習筆記-多線程-線程控制、線程組正文
package testpack;
public class Test2 {
public static void main(String[] args) throws InterruptedException{
System.out.println("如今線程是: "+Thread.currentThread().getName());
A a=new A();
Thread t1=new Thread(a,"被join線程");
t1.start(); //先start,後join
t1.join(); //調用join()辦法
System.out.println("主線程執行終了"); //主線程要等t1線程執行終了,才執行這條語句;假如不調用join(),能夠主線程執行完了這條語句,才會執行t1
}
}
class A implements Runnable{
public void run(){
for (int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+" 輸入: "+i);
}
}
}
package testpack;
public class Test2 {
public static void main(String[] args) throws InterruptedException{
Thread t=new Thread(new A(),"後台線程");
t.setDaemon(true); //start之前調用setDaemon辦法
t.start();
for (int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+" output: "+i);
}
}
}
class A implements Runnable{
public void run(){
for (int i=0;i<50;i++){
System.out.println(Thread.currentThread().getName()+" 輸入: "+i);
}
}
}
輸入:
main output: 0
main output: 1
main output: 2
main output: 3
main output: 4
main output: 5
main output: 6
後台線程 輸入: 0
main output: 7
後台線程 輸入: 1
後台線程 輸入: 2
後台線程 輸入: 3
main output: 8
main output: 9
後台線程 輸入: 4
後台線程 輸入: 5 //後台線程本應執行到49,獨一的前台線程主線程完畢後,後台線程也跟著死亡
package testpack;
import java.util.Date;
public class Test2 {
public static void main(String[] args) throws InterruptedException{
System.out.println("以後時間:"+new Date());
Thread.sleep(3000);
System.out.println("以後時間:"+new Date());
}
}
輸入:
以後時間:Thu Dec 08 09:44:02 CST 2016
以後時間:Thu Dec 08 09:44:05 CST 2016 //主線程暫停執行3秒
package testpack;
public class Test2 {
public static void main(String[] args) throws InterruptedException{
A a1=new A("線程 低");
A a2=new A("線程 中");
A a3=new A("線程 高");
a1.setPriority(Thread.MIN_PRIORITY);
a2.setPriority(Thread.NORM_PRIORITY);
a3.setPriority(Thread.MAX_PRIORITY);
a1.start();
a2.start();
a3.start();
}
}
class A extends Thread{
A(String name){
super(name);
}
public void run(){
for (int i=1;i<10;i++){
System.out.println(getName()+" 輸入: "+i);
if (i==3){
Thread.yield();
}
}
}
}
輸入:
線程 低 輸入: 1
線程 高 輸入: 1
線程 中 輸入: 1
線程 高 輸入: 2
線程 低 輸入: 2
線程 高 輸入: 3
線程 中 輸入: 2
線程 高 輸入: 4
線程 低 輸入: 3 //低級線程輸入3後,yield,上面讓高線程執行
線程 高 輸入: 5
線程 中 輸入: 3 //中級線程輸入3後,也yield,上面讓高線程執行
線程 高 輸入: 6
線程 高 輸入: 7
線程 高 輸入: 8
線程 高 輸入: 9
線程 低 輸入: 4
線程 中 輸入: 4
線程 中 輸入: 5
.......
System.out.println(Thread.currentThread());
輸入:Thread[main,5,main]:第一個main是線程名;5是線程優先級;第二個main是所屬線程組名
package testpack;
public class Test2 {
public static void main(String[] args) throws InterruptedException{
System.out.println("主線程名: "+Thread.currentThread().getName()
+" ;所屬線程組: "+Thread.currentThread().getThreadGroup().getName()
+" ;是不是後台線程?"+Thread.currentThread().isDaemon());
ThreadGroup tg=new ThreadGroup("後台線程組");
tg.setDaemon(true);
A a=new A(tg,"後台線程組的線程A");
a.start();
}
}
class A extends Thread{
A(ThreadGroup group,String name){
super(group,name);
}
public void run(){
System.out.println("線程名: "+getName()+" ;所屬線程組:"+getThreadGroup().getName()+" ;是不是後台線程?"+isDaemon());
}
}
輸入:
主線程名: main ;所屬線程組: main ;是不是後台線程?false
線程名: 後台線程組的線程A ;所屬線程組:後台線程組 ;是不是後台線程?false //後台線程組下的線程不一定是後台線程