java多线程核心api以及相关概念(一)

  • 2019 年 10 月 3 日
  • 笔记

????????????api????????????????????????????????

?????????java?????????????????????????

??

1.?????????

?????????

?????????

??synchronized??????

????API?

?????????????

????????

??????

?????????????????????????????????????????????????????????????????????????????????????????????cpu???????????????????????????????????????????

??????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????10???????1??????????????????????10????????1??????????????10??????????11???????21?????????????????????????????????1???????????????2??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????

?????????

1.???????????????????Thread???????Runnable???????????java???????????????????????????????Runnable??????????????????????????????????????????Thread?????????????Runnable???????????Runnable?????????????????????????????Thread??start??start?????

 

       MyRunnable m = new MyRunnable ();   //???Runnable??          Thread m1 = new Thread(m);          m1.setName("????");          m1.start();

 

 

 

2.??????????????run() ???????????????????????Thread.start() ?????????????cpu??????????????????????????????????????????????????????? run() ???

3.??????????????????????????????????????????????????????????????????

?????????

???????????????????????????????????????????????????????????????????????????????????????

 

ackage ???;

import javax.swing.plaf.TableHeaderUI;

class MyRunnable implements Runnable{
int count = 10;
public void run(){
count--;
System.out.println(Thread.currentThread().getName() + " " + count);
}
}
public class test1{
public static void main(String[] args){
MyRunnable m = new MyRunnable();
Thread m1 = new Thread(m, "A");
Thread m2 = new Thread(m,"B");
Thread m3 = new Thread(m,"c");
Thread m4 = new Thread(m,"D");
Thread m5 = new Thread(m,"E");
m1.start();
m2.start();
m3.start();
m4.start();
m5.start();
}
}

 

?????????????????????count?10??5???????????????????B????????count????????????????????????A??????count–???B?????????10?????count–?????9????????????count?A??????????B?????count?????????A?????????8????????????9,?????????9??????8???????????????????????????????

"C:Program FilesJavajdk-11.0.1binjava.exe" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2019.1.3libidea_rt.jar=60024:C:Program FilesJetBrainsIntelliJ IDEA 2019.1.3bin" -Dfile.encoding=UTF-8 -classpath C:learnjavapracticeoutproductionthreadTest ???.test1  A  8  B  8  D  6  c  5  E  7    Process finished with exit code 0

???????????

???count????run() ????????????????????????????????????????count???????????A?????B???count??????????????????????????????

??????????????????synchronized???

??synchronized??????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????count???????????????????????????count?????????????

????API?

1.CurrentThread()   :?????????????????????????????????????????????MyRunnable()  ??main  ???????????run()???????A?????  ?????this,getName()  ????????????this?????Name

class MyRunnable implements Runnable{      int count = 10;      MyRunnable(){          System.out.println(Thread.currentThread().getName());    //??   main      }      synchronized public void run(){              count--;              System.out.println(Thread.currentThread().getName() + "  " + count);   //??  A      }  }  public class test1{      public static void main(String[] args){          MyRunnable m = new MyRunnable();          Thread m1 = new Thread(m, "A");          m1.start();      }  }

2.isAlive():?????????????????????start()???run()  ????????  ,???Thread.CurrentThread.isAlive()

3.sleep():  ????????????????????????????????????????????????????????????try???????Thread.sleep()

4.getId():  ??????????

?????????????

??????????????cpu??????????????????????????????????????????

????????

1.??run???????????

2.??  interrupt ??

 Thread.interrupt() : ??????????????????????????????????????????????????????????????????????????????????  isTerrupted()?interrupted()??????????interrupt???????????????????????????????????????????????????????????????????????????

interrupted(): ???????????????????????????????????????????????????????????

isInterrupted():  ???????????????????????????????????

?????1????????????2.??????????

??????

Thread.interrupt() ?

 

class MyRunnable implements Runnable{      int count = 10;      MyRunnable(){          System.out.println(Thread.currentThread().getName());      }      public void run(){          for(int i=0;i<1000;i++)          {              System.out.println(i);          }      }  }  public class test1{      public static void main(String[] args){          MyRunnable m = new MyRunnable();          Thread m1 = new Thread(m, "A");          m1.start();          m1.interrupt();                      //??????????????true,false          //Thread.currentThread().interrupt();          System.out.println("??????1?"+Thread.interrupted());    //??false          System.out.println("??????2?"+Thread.interrupted());?  //??false?       }  }

 

??????false????????m1?????????false?????interrupted??????????main???main??????????false????????????m1.interrupt()???????true ?false???????false????????????????????????????main??????????????false

isterrupted()???????????????????????????????????????

package ???;    import javax.swing.plaf.TableHeaderUI;    class MyRunnable implements Runnable{      int count = 10;      MyRunnable(){          System.out.println(Thread.currentThread().getName());      }      public void run(){          for(int i=0;i<1000;i++)          {              System.out.println(i);          }      }  }  public class test1{      public static void main(String[] args){          MyRunnable m = new MyRunnable();          Thread m1 = new Thread(m, "A");          m1.start();          m1.interrupt();          //Thread.currentThread().interrupt();          System.out.println("??????1?&&&&&&&&&&&&&&&&&&&&&&&"+m1.isInterrupted());  //??true          System.out.println("??????2?&&&&&&&&&&&&&&&&&&&"+m1.isInterrupted());       //??true      }  }

???true?????????????m1??m1???????????true????????true?????????cpu?????????????????????????

???????????????run??????????

public void run(){          for(int i=0;i<1000;i++)          {              if(Thread.interrupted()){                  System.out.println("???");                  break;              }              System.out.println(i);          }
????//????????????????????????? }

??????????????????????

???
205 206 207 208 209 210 211 212 ??? Process finished with exit code 0

??????????????????????????????????????????????run ???????

    public void run(){          try{          for(int i=0;i<1000;i++)          {              if(Thread.interrupted()){                  System.out.println("???");                  throw new InterruptedException();              }              System.out.println(i);     
????}
????//for???????????????????
????}catch (InterruptedException e){ e.printStackTrace(); } }

??????????????

????????????????????????Thread.sleep()???????????????????????interrrupt()???????????????????????????????????????????????????????????????

????????m1.start()???m1?????sleep()????main?????m1????????????????????????

class MyRunnable implements Runnable{      int count = 10;      MyRunnable(){          System.out.println(Thread.currentThread().getName());      }      public void run(){          try{          for(int i=0;i<1000;i++)          {              System.out.println(i);              Thread.sleep(1000);          }}catch (InterruptedException e){              System.out.println("??????");              e.printStackTrace();          }      }  }  public class test1{      public static void main(String[] args){          MyRunnable m = new MyRunnable();          Thread m1 = new Thread(m, "A");          m1.start();          try {                 //?????????m1??????????              Thread.sleep(10);          }catch (InterruptedException e){              e.printStackTrace();          }          m1.interrupt();      }  }

?????

main  0  ??????  java.lang.InterruptedException: sleep interrupted      at java.base/java.lang.Thread.sleep(Native Method)      at ???.MyRunnable.run(test1.java:15)      at java.base/java.lang.Thread.run(Thread.java:834)    Process finished with exit code 0

 

3.??stop

??????????????????

???????????????????????1000??1000?????????????????????????????????????????????1000???????????????1???????????stop???????????????????????1000???????????????????????????

4.????

??????????????????????????????????????????????

suspend()?????      

resume()????

??????????????????????????????????????????????????????????

??????

???????????????????????????

???????????????????????????????a???????????


class test{
??synchronized public void printStr() { if(Thread.currentThread().getName().equals("a")){
?????? System.out.println("???????"); Thread.currentThread().suspend(); } }
}
class MyRunnable implements Runnable{      int count = 10;      MyRunnable(){          System.out.println(Thread.currentThread().getName());      }      public void run() {         //??test???printStr??      }  }

????????a?b??????????MyRunnable???????????start?a???a?????printStr()???????test??????????suspend??????????test????????????b???????????printStr()?????????????????????????????????????????????????suspend?????????????????System.out.println()  ???????????out???println()?????????????????????????????????????

class MyThread extends Thread{      private  int i=0;      public void run(){          while(true){              System.out.println(i);    //???println() ??              i++;          }      }  }  public class test1{      public static void main(String[] args){           MyThread m = new MyThread();           m.start();          try {              Thread.sleep(10);          }catch (InterruptedException e){              e.printStackTrace();          }          m.suspend();          System.out.println("main");       //????      }  }

?????????????????????????  main  ???????println()???????????????????a????????

   public void println(int x) {          synchronized (this) {              print(x);              newLine();          }      }

?????:

????????stop???????????

????????

??????????main??????????????????????55????????????????????????????????????????????????????????????????????????

???????????????????????????????????

1.setPriotity(int )  ?????

2.getPriotity()   ?????

3.?????????????A??????B????B????????A?????????????????????

4.????????????????????????????????????????cpu???????????????????????????????????????????????????????

??????

java??????????????????????????????????????main??????????????????java?????????????????????????????????delete?????????????????????????????????????????????????????????????????????????????

?????thread.setDaemon(true);   ???false?

?????????????????????????