一、實驗報告
實驗任務詳情:
完成火車站售票程序的模擬。
要求:
(1)總票數1000張;
(2)10個窗口同時開始賣票;
(3)賣票過程延時1秒鍾;
(4)不能出現一票多賣或賣出負數號票的情況。
class Market implements Runnable { private int ticket; public int getTicket() { return ticket; } void setTicket(int ticket) { this.ticket = ticket; } public void run() { for (int i = 1; i < 100; i++) { synchronized (this) { if (ticket > 0) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } ticket--; System.out.println(Thread.currentThread().getName() + "售票成功;" + "剩余:" + ticket+"張"); } } } } } class seven { public static void main(String[] args){ Thread[] t=new Thread[10]; Market mar=new Market(); mar.setTicket(1000); for(int i=0;i<10;i++){ new Thread(mar,i+1+"號窗口").start(); } } }
二、總結
進程與線程
進程:是執行中一段程序,即一旦程序被載入到內存中並准備執行,它就是一個進程。進程是表示資源分配的的基本概念,又是調度運行的基本單位,是系統中的並發執行的單位。
線程:單個進程中執行中每個任務就是一個線程。線程是進程中執行運算的最小單位。
進程與線程的區別
線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位;
一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線;
進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段,數據集,堆等)及一些進程級的資源(如打開文件和信號等),某進程內的線程在其他進程不可見;
調度和切換:線程上下文切換比進程上下文切換要快得多。