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?
?????????????????????????