中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java多線程方法有哪些

發布時間:2022-01-06 17:30:59 來源:億速云 閱讀:125 作者:iii 欄目:編程語言

這篇文章主要介紹“Java多線程方法有哪些”,在日常操作中,相信很多人在Java多線程方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java多線程方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、interrupt方法一種讓線程退出的方式。

import java.util.*;  public class TestInterrupt{      public static void main(String[] args){          MyThread t = new MyThread();          t.start();          try{Thread.sleep(10000);}          catch(InterruptedException i){}          t.interrupt();      }  }   class MyThread extends Thread{      public void run(){          while(true){              try{                  System.out.println("------"+new Date()+"-----");                  Thread.sleep(1000);              }catch(InterruptedException i){                  return;              }          }      }  }

二、join和yield方法
t.join(); //t的run()方法完才會繼續執行當前線程方法體
//也就是兩個線程變成了一個線程
t.yield(); //暫停當前正在執行的線程對象,并執行其他線程。方法為靜態
//哪個線程體執行此方法,哪個線程讓步

public class TestYield {    public static void main(String[] args) {      MyThread3 t1 = new MyThread3("t1");      MyThread3 t2 = new MyThread3("t2");      t1.start(); t2.start();    }  }  class MyThread3 extends Thread {    MyThread3(String s){super(s);}    public void run(){      for(int i =1;i<=100;i++){        System.out.println(getName()+": "+i);        if(i%10==0){          yield();        }      }    }  }

三、線程優先級別
線程的優先級用數字表示,范圍從1到10,一個線程的缺省優先級為5.
Thread.MAX_PRIORITY=1
Thread.MIN_PRIORITY=10
Thread.NORM_PRIORITY=5
例:t.setPriority(Thread.NORM_PRIORITY+3);

四、線程同步
1.同步代碼塊
synchronized(this){  //在執行代碼塊過程中,不會被其他線程打斷
... 
}
public sunchronized void method //執行此方法時,當前對象被鎖定
在Java語言中,引入了對象互斥鎖的概念,保證共享數據操作的完整性,每個對象 都對應一個可稱為"互斥鎖"的標記,這個標記保證在任一時刻,只能有一個線程訪 問該對象。
2.線程死鎖

public class TestDeadLock implements Runnable {      public int flag = 1;      static Object o1 = new Object(), o2 = new Object();      public void run() {  System.out.println("flag=" + flag);          if(flag == 1) {              synchronized(o1) {                  try {                      Thread.sleep(500);                  } catch (Exception e) {                      e.printStackTrace();                  }                  synchronized(o2) {                      System.out.println("1");                      }              }          }          if(flag == 0) {              synchronized(o2) {                  try {                      Thread.sleep(500);                  } catch (Exception e) {                      e.printStackTrace();                  }                  synchronized(o1) {                      System.out.println("0");                  }              }          }      }                public static void main(String[] args) {          TestDeadLock td1 = new TestDeadLock();          TestDeadLock td2 = new TestDeadLock();          td1.flag = 1;          td2.flag = 0;          Thread t1 = new Thread(td1);          Thread t2 = new Thread(td2);          t1.start();          t2.start();                }  }

五、生產者消費者問題

public class ProducerConsumer {      public static void main(String[] args) {          SyncStack ss = new SyncStack();          Producer p = new Producer(ss);          Consumer c = new Consumer(ss);          new Thread(p).start();          new Thread(p).start();          new Thread(p).start();          new Thread(c).start();      }  }   class WoTou {      int id;       WoTou(int id) {          this.id = id;      }      public String toString() {          return "WoTou : " + id;      }  }   class SyncStack {        //棧實現      int index = 0;      WoTou[] arrWT = new WoTou[6];    //相當于裝物品的籃子            public synchronized void push(WoTou wt) {    //生產物品,線程安全          while(index == arrWT.length) {        //當籃子滿了線程等待              try {                              this.wait();                      } catch (InterruptedException e) {                  e.printStackTrace();              }                        }          this.notifyAll();    //開始生產時,叫醒等待的其他線程開始消費          arrWT[index] = wt;              index ++;      }            public synchronized WoTou pop() {        //消費物品,線程安全          while(index == 0) {            //如果籃子空了              try {                  this.wait();        //線程等待,等待生產者開始                           //生產,叫醒此線程              } catch (InterruptedException e) {                  e.printStackTrace();              }                        }          this.notifyAll();            //消費時喊醒生產者生產          index--;          return arrWT[index];      }  }   class Producer implements Runnable {            //生產者類      SyncStack ss = null;      Producer(SyncStack ss) {          this.ss = ss;      }            public void run() {          for(int i=0; i<20; i++) {    //生產20個              WoTou wt = new WoTou(i);              ss.push(wt);                          System.out.println("生產了:" + wt);              try {                  Thread.sleep((int)(Math.random() * 200));              } catch (InterruptedException e) {                  e.printStackTrace();              }                      }      }  }   class Consumer implements Runnable {      SyncStack ss = null;      Consumer(SyncStack ss) {          this.ss = ss;      }            public void run() {          for(int i=0; i<20; i++) {        //消費20個              WoTou wt = ss.pop();              System.out.println("消費了: " + wt);              try {                  Thread.sleep((int)(Math.random() * 1000));              } catch (InterruptedException e) {                  e.printStackTrace();              }                      }      }  }

到此,關于“Java多線程方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁阳县| 集贤县| 海安县| 神池县| 宜阳县| 库车县| 黎平县| 平邑县| 碌曲县| 高淳县| 西乡县| 淄博市| 沙雅县| 定襄县| 招远市| 江永县| 宜宾市| 镇沅| 曲周县| 新乡县| 永登县| 萍乡市| 台山市| 淮滨县| 老河口市| 宁津县| 鹿邑县| 东宁县| 襄垣县| 曲沃县| 天峻县| 双桥区| 佳木斯市| 蛟河市| 天津市| 宁远县| 苍南县| 新竹县| 樟树市| 蕉岭县| 沁源县|