• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    java多線程創建方式一Thread

          jdk1.5之前利用的線程建立體例。

          1、建立利用擔當Thread類并重寫run方式的體例實現,或者利用匿名內部類的體例。

      生命周期的五種狀況 新建(new Thread) 當建立Thread類的一個實例(對象)時,此線程進入新建狀況(未被啟動)。 例如:Thread  t1=new Thread(); 停當(runnable) 線程已經被啟動,正在期待被分派給CPU時候片,也就是說此時線程正在停當隊列中列隊等待獲得CPU資本。例如:t1.start(); 運行(running) 線程獲得CPU資本正在執行使命(run()方式),此時除非此線程主動拋卻CPU資本或者有優先級更高的線程進入,線程將一向運行到竣事。 滅亡(dead) 當線程執行完畢或被其它線程殺死,線程就進入滅亡狀況,這時線程不成能再進入停當狀況期待執行。 天然終止:正常運行run()方式后終止 異常終止:挪用stop()方式讓一個線程終止運行 堵塞(blocked) 因為某種原因導致正在運行的線程讓出CPU并暫停本身的執行,即進入堵塞狀況。 正在睡眠:用sleep(long t) 方式可使線程進入睡眠體例。一個睡眠著的線程在指心猿意馬的時候曩昔可進入停當狀況。 正在期待:挪用wait()方式。(挪用motify()方式回到停當狀況) 被另一個線程所梗阻:挪用suspend()方式。(挪用resume()方式恢復)

    東西/原料

    • 電腦
    • intellij IDEA

    方式/步調

    1. 1

      根基利用

      package com.sgg.thread;


      /**

       * 多線程的建立。體例1擔當與Thread類

       * 1.建立一個擔當與Thread的子類

       * 2.重寫run方式,將此線程執行的操出聲明在run方式中

       * 3.建立Thread子類對象

       * 4.經由過程此對象挪用start()方式啟動線程

       *

       */

      public class TestThread {



          public static void main(String[] args) {

              //ConcurrentHashMap<Object, Object> objectObjectConcurrentHashMap = new ConcurrentHashMap<Object, Object>();


              MyThread myThread = new MyThread();

              myThread.start();



              //利用匿名體例擔當

      //        new Thread(){

      //

      //            @Override

      //            public void run() {

      //                for (int i = 0; i < 100; i++) {

      //                    if (i%2 == 1 ){

      //                        System.out.println(Thread.currentThread().getName()+":"+i);

      //                    }

      //

      //                    if(i%20 == 0){

      //                        //釋放CPU的執行權

      //                        this.yield();

      //                    }

      //

      //                }

      //            }

      //        }.start();



              for (int i = 0; i < 100; i++) {

                  if (i%2 == 1 ){

                      System.out.println(Thread.currentThread().getName()+":"+Thread.currentThread().getPriority()+":"+i);

                  }


                  if( i== 10){

                      try {

                          myThread.join();

                      } catch (InterruptedException e) {

                          e.printStackTrace();

                      }

                  }


              }


              System.out.println("myThread是否存活:"+myThread.isAlive());


          }

      }



      //利用集當作體例

      class MyThread extends Thread{


          @Override

          public void run() {


              for (int i = 0; i < 100; i++) {

                  if (i%2 ==0 ){


                      try {

                          sleep(1000);

                      } catch (InterruptedException e) {

                          e.printStackTrace();

                      }

                      System.out.println(Thread.currentThread().getName()+":"+i);

                  }


              }

          }



          public MyThread(){};


          //建立時設置線程名字

          public MyThread(String name){

              //挪用java.lang.Thread.Thread(java.lang.String)

              super(name);

          }

      }

    2. 2

      常用方式界說

      package com.sgg.thread;


      /**

       * 測試Thread類中常用的方式

       * 1.strat() :啟動當火線程,并挪用當火線程的run()

       * 2.run(): 凡是需要從頭Thread中的此方式,將建立的線程中所需的操作(也就是營業代碼)聲明在此方式中

       * 3.currentThread(): 靜態方式,返回當前代碼的線程

       * 4.getName():獲取當火線程的名字

       * 5.setName():設置當火線程房名字

       * 6.yield() :是否當火線程CPU的執行權

       * 7.join() :在線程a中挪用線程b的join(),此時線程a就進入梗阻狀況,知道線程b執行完之后,線程a才竣事梗阻狀況

       * 8.stop() :已過時,當執行此方式時,強制竣事當火線程。

       * 9.sleep(long millitime) :讓當火線程“睡眠”指心猿意馬的millitime毫秒,在指心猿意馬的millitime毫秒時候內,當火線程是梗阻狀況

       * 10.isAlive() :判定當火線程是否存活

       *

       *

       * 線程的優先級

       * 1.MAX_PRIORITY = 10;

       * 2.NORM_PRIORITY = 5;

       * 3.MIN_PRIORITY = 1;

       *若何獲取和設置當火線程的優先級

       * 1.getPriority()

       * 2.setPriority(int newPriority) :啟動之前設置線程的優先級

       *

       * 申明:高優先級的線程要搶占低優先級線程CPU的執行權。可是只是從概率上講,高優先級的線程高概率下被執行。并不料味著高優先級線程執行無缺,低優先級的線程才會執行。

       */

      public class ThreadMethodTest {


          public static void main(String[] args) {


          }

      }

    3. 3

      實例操練


      package com.sgg.thread;


      class MyThread extends Thread {


      private static int ticket = 1000;


      @Override

      public void run() {


      while (true) {

      if (!show()) {

      break;

      }

      ;

      }

      }

      private static synchronized boolean show() {//同步監督器:MyThread.class

      //private synchronized boolean show() {//同步監督器就是:this  別離是myt1,myt2,myt3  此處利用是錯誤的

      if (ticket > 0) {

      try {

      Thread.sleep(100);

      } catch (InterruptedException e) {

      e.printStackTrace();

      }


      System.out.println(Thread.currentThread().getName() + "票號:" + ticket);

      ticket--;

      return true;

      }

      return false;

      }


      }


      /**

       * 利用同步代碼塊處置擔當Thread類的線程平安問題

       * 例子 :建立三個窗口賣票,票總數100 利用實現Runable的體例

       * 申明:在擔當Thread類建立多線程的體例中,慎用this充任同步監督器,考慮利用當前類充任監督器如MyThread.class

       * @author Administrator

       *

       */

      public class WindowsThread {

      public static void main(String[] args) {

      MyThread myt1 = new MyThread();

      myt1.start();

      MyThread myt2 = new MyThread();

      myt2.start();

      MyThread myt3 = new MyThread();

      myt3.start();

      //ConcurrentHashMap<K, V>

      }


      }

    4. 4

      線程平安問題

      1、利用lock鎖

      2、利用synchronized關頭字,同步方式或者同步塊

    • 發表于 2019-08-13 22:56
    • 閱讀 ( 791 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆