先熟悉一下一些概念:
多線程:指的是程序(一個進程)運行時產生了不止一個線程
並行與併發:
並行:多個cpu實例或者多臺機器同時執行一段處理邏輯,是真正的同時。
併發:通過cpu調度算法,讓用戶看上去同時執行,實際上從cpu操作層面不是真正的同時。併發往往在場景中有公用的資源,那麼針對這個公用的資源往往產生瓶頸,我們會用TPS或者QPS來反應這個系統的處理能力。
public class Ticket extends Thread {
private int num = 100;
public void run(){
while(true){
if(num>0){
System.out.println(Thread.currentThread().getName()+"------"+"sale---"+num--);
}
}
}
}
class TicketDemo{
public static void main(String[] args) {
Ticket t1 = new Ticket(); //票對象
Ticket t2 = new Ticket();
Ticket t3= new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
它產生的結果是:
這個時由代碼可知在實例化對象的時候由票對象他、t1、t2、t3、t4四個對象,這意味著每個對象就存在了100張票,不符合我們實際規則,我們的目的是模擬四個賣票窗口,在四個窗口賣同樣的票顯然是不行的。
*public class Ticket implements Runnable{
private int num = 100;
public void run(){
while(true){
if(num>0){
System.out.println(Thread.currentThread().getName()+"------"+"sale---"+num--);
}
}
}
}
class TicketDemo{
public static void main(String[] args) {
Ticket t = new Ticket();
//創建一個線程任務對象
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
*/
第二種方式通過實現Runnable接口來實現線程,然後就只需要實例化一個票對象,然後開四個窗口,也就是創建四個線程此時可以看到結果
通過這樣一個簡單的實例來更好的理解線程的用法,有不對的地方還請多多指正,還是小白,請見諒!