提及線程 就不得不提進程 他們之間的關係很緊密 java
進程:內存中運行的應用程序 每一個進程都有本身的一塊內存空間 而線程是進程中的一個執行單元 一個進程中能夠有多個線程 多線程的好處就是能夠併發操做程序 將cpu資源利用率最大化 就像咱們生活中同樣 當咱們在一個視屏網站下電影的時候 咱們能夠去作一些其餘的時間 不須要一直等着電影下完再去作不會耗費多餘的時間 這就是多線程的好處安全
如何實現多線程呢多線程
1.繼承Thread類 而後重寫run方法併發
2.實現Runnable接口實現重寫·ide
|
特色
|
繼承thread類
|
只適用於單繼承 編寫簡單 能夠直接操做
|
實現runnable接口
|
能夠實現多繼承
|
線程的狀態測試
1.新建狀態網站
線程在被建立後就進入了新建狀態 例如Thread thread=newThread();this
2.就緒狀態(也稱爲可執行轉態)spa
1 package com.newroad.thread.test; 2 //帳戶類
3 public class Account { 4 private double balance; 5 private Object lock=new Object(); 6 public Account(double balance) { 7 super(); 8 this.balance = balance; 9 } 10 public void withdrawMoney(double money) { 11 String name=Thread.currentThread().getName(); 12 System.out.println(name+"取款前帳戶餘額爲:"+balance); 13 if (balance>=money) { 14 balance=balance-money; 15 System.out.println(name+"取款金額爲:"+money +"取款後,餘額爲:"+balance); 16 }else { 17 System.out.println(name+"餘額不足,帳戶餘額爲:"+balance+"取款金額爲;"+money); 18 } 19
20 } 21
3
34
35 } 36
37 //線程類
38 package com.newroad.thread.test;
40 public class PersonThread extends Thread { 41 private Account account; 42 private double drawbalance; 43 public PersonThread(Account account, double drawbalance) { 44 super(); 45 this.account = account; 46 this.drawbalance = drawbalance; 47 } 48
49 @Override 50 public void run() { 51 account.withdrawMoney(drawbalance); 52
53 } 54
55 } 56
57
58 //這是測試類
59 package com.newroad.thread.test; 60
61 public class Test { 62 public static void main(String[] args) { 63 Account account=new Account(4000); 64 PersonThread p=new PersonThread(account, 2400); 65 PersonThread p1=new PersonThread(account, 1000); 66 PersonThread p2=new PersonThread(account, 600); 67 p.setName("張三"); 68 p1.setName("張三媳婦"); 69 p2.setName("張三爸"); 70 p.start(); 71 p1.start(); 72 p2.start(); 73 } 74 }
1 package com.newroad.thread.test; 2 3 public class Account { 4 private double balance; 5 private Object lock = new Object(); 6 7 public Account(double balance) { 8 super(); 9 this.balance = balance; 10 } 11 public void withdrawMoney(double money) { 12 String name = Thread.currentThread().getName(); 13 synchronized (this) { 14 System.out.println(name + "取款前帳戶餘額爲:" + balance); 15 if (this.balance >= money) { 16 balance = balance - money; 17 System.out.println(name + "取款金額爲:" + money + "取款後,餘額爲:" + balance); 18 } else { 19 System.out.println(name + "餘額不足,帳戶餘額爲:" + balance + "取款金額爲;" + money); 20 } 21 } 22 } 23 24 }
這時咱們就能夠發現就沒問題了線程