国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java復習之線程的操作方法

2019-11-06 07:00:47
字體:
來源:轉載
供稿:網友

這篇博客主要是總結一下java中線程常用的操作方法。

Thread(Runnable target) 分配一個新的Thread對象

Thread(Runnable target,String name) 分配新的Thread對象,并給線程命名

Thread(String name) 分配新的Thread對象

static Thread currentThread() 返回當前正在執行的線對象的引用

long getId() 返回線程的標識符

String getName() 返回線程的名稱

void setName(String name) 改變線程名稱,使之與參數name相同

boolean isAlive() 測試線程是否處于活動狀態

Demo:

public class ThreadDemo { public static void main(String args[]) { MyThread myThread=new MyThread(); //實例化一個線程對象并給其賦值 Thread thread=new Thread(myThread,"小白線程"); //獲取線程的ID System.out.PRintln(thread.getId()); //設置線程的名稱 thread.setName("小黑線程"); thread.start(); System.out.println("thread線程是否活動"+thread.isAlive()); }}class MyThread implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()); }}

static void sleep(long millis) 休眠指定的毫秒繼續執行 sleep方法休眠完成后,線程會重新恢復到就緒狀態

sleep方法的原理 讓當前線程進入休眠狀態,讓出當次執行的CPU時間,但是不丟失監視器的所屬權。

static void sleep(long millis,int nanos) 休眠指定毫秒 納秒之后繼續執行

Demo:

public class ThreadDemo2 { public static void main(String args[]) { MyThread2 myThread2=new MyThread2(); Thread thread=new Thread(myThread2); thread.start(); for(int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName() +"-"+i+" "); //讓當前線程進入休眠狀態 try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}class MyThread2 implements Runnable{ @Override public void run() { for (int i=0;i<10;i++) { System.out.println(Thread.currentThread().getName() +"-"+i); try { //讓當前線程進入休眠狀態 Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}

void join() 等待調用該方法的線程執行完畢之后,再去執行其他線程

void join(long millis) 等待該線程終止的時間最長為milli毫秒

void join(long millis,int nanos) 等待該線程的終止的時間最長毫秒 納秒

Demo:

public class ThreadDemo3 { public static void main(String args[]) { MyThread3 myThread3=new MyThread3(); Thread thread=new Thread(myThread3); thread.start(); for (int i=0;i<9;i++) { System.out.println("Main"+i); if(i==5) { try { //等待thread線程終止在執行主線程 thread.join(); }catch (InterruptedException ex) { ex.printStackTrace(); } } try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}class MyThread3 implements Runnable{ @Override public void run() { for(int i=0;i<8;i++) { System.out.println(Thread.currentThread().getName()+"-"+i); try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}

void interrupt() 中斷線程

static boolean interrupted() 測試當前線程是否已經中斷

void setPriority(int newPriority) 更改線程的優先級

優先級高的線程也不一定百分百搶到CPU,只是說搶到的概率大一些

static int MAX_PRIORITY 線程可以具有的最高優先級

static int MIN_PRIORITY 線程可以具有的最低優先級

static int NORM_PRIORITY 分配給線程的默認優先級

Demo:

/** * 中斷線程 * 1.Interrupt()方法只是設置了線程的中斷標記為true,并沒有真正的中斷線程,線程還在執行 * 真正中斷線程還是得自身中斷 * 2.自定義標記完成中中斷 *//** * 設置線程的優先級 */public class ThreadDemo4 { public static void main(String args[]) { MyThread4 myThread4=new MyThread4(); Thread thread=new Thread(myThread4,"t1"); //start方法是開辟新的線程執行run()方法 Mythread5 mythread5=new Mythread5(); Thread thread1=new Thread(mythread5,"t2"); //設置線程的優先級 thread.setPriority(Thread.MAX_PRIORITY); thread1.setPriority(Thread.MIN_PRIORITY); thread.start(); thread1.start(); for (int i=0;i<7;i++) { System.out.println("Main-"+i); if(i==5) { //thread.interrupt();//設置中斷標記(中斷狀態為True) mythread5.setFlag(false);//中斷線程 } try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}class MyThread4 implements Runnable{ @Override public void run() { for (int i=0;i<7;i++) { System.out.println(Thread.currentThread().getName()+i); try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}class Mythread5 implements Runnable{ private boolean flag = true; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void run() { int i=0; while (flag) { System.out.println(Thread.currentThread().getName()+i); i++; try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}

線程可以分為用戶線程與守護線程,我們自己創建的線程一般為用戶線程,守護線程是指當程序中沒有用戶線程的時候,所有的守護線程都會終止,如GC 垃圾回收機制

boolean isDaemon() 測試該線程的是否為守護線程

void setDaemon(boolean on) 將該線程標記為守護線程或者用戶線程

static void yield() 暫停當前正在執行的線程對象,并執行其他線程讓出本次的執行權,只讓一次

public class ThreadDemo5 { public static void main(String args[]) { MyThread6 myThread6=new MyThread6(); Thread thread=new Thread(myThread6); //設置線程為守護線程 // thread.setDaemon(true); thread.start(); for(int i=0;i<10;i++) { System.out.println("Main-"+i); if(i==5) { //讓出當次的cpu的執行時間 Thread.yield(); } try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}class MyThread6 implements Runnable{ @Override public void run() { for (int i=0;i<20;i++) { System.out.println("Mythread6-"+i); try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.printStackTrace(); } } }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗定市| 荆州市| 西华县| 英德市| 凭祥市| 集安市| 潢川县| 宝鸡市| 罗城| 通道| 长子县| 深州市| 怀来县| 灌阳县| 谷城县| 河间市| 延长县| 宜黄县| 孟连| 旬邑县| 凤阳县| 遂宁市| 呼伦贝尔市| 漾濞| 兴隆县| 河间市| 藁城市| 双江| 临沧市| 蓝田县| 格尔木市| 潮州市| 阿鲁科尔沁旗| 黄平县| 亳州市| 鄂托克前旗| 柞水县| 奉贤区| 莱芜市| 尼木县| 千阳县|