遇到的問題:java
多線程生產者與消費者模型;還沒有解決!安全
jar多線程
---------------併發
jar cvf xxx.jar -C classes/ .ide
進程this
-----------------spa
進程之間內存式隔離的。內存不共享。線程
線程對象
-----------------three
程序執行過程當中,併發執行的代碼段。
線程之間能夠共享內存。
Thread : 線程類。
start()//通知cpu,能夠開始執行該線程。
run()//線程具體執行的代碼段。
Thread t = new Thread();
t.start();
Thread.currentThread()//獲得當前的執行線程。
yield()//讓線程放棄cpu的搶佔權。
sleep(int mils)//讓當前線程休眠指定的毫秒數.
線程安全:增長了同步處理。確保在同一時刻,只有一個線程執行同步代碼。
同步方法使用的當前對象做爲同步對象。
靜態方法能夠加同步處理,使用Class做爲同步對象。
××× :
Box ://3
Waiter//守護線程 daemon Thread.setDaemon(true);
yield()
join()
sleep(int ms);
setDaemon(true);//線程啓動前設置
isDaemon();//指定線程是不是守護線程
start();//啓動線程
run();//
notify()//選擇一個監控器對象等待隊列中的線程進行通知。
notifyAll()//選擇全部監控器對象等待隊列中的線程進行通知。
wait()//將當前線程放入監控器的等待隊列中。
wait(int n )//線程進入到等待隊列後,最多等待n長時間,時間一旦,自動喚醒。
例:5輛車依次經過山洞
public class ThreadDemo { public static void main(String[] args) throws Exception { Thread t1=new Thread(new MultiThreads(new Car("one"))); Thread t2=new Thread(new MultiThreads(new Car("two"))); Thread t3=new Thread(new MultiThreads(new Car("three"))); Thread t4=new Thread(new MultiThreads(new Car("four"))); Thread t5=new Thread(new MultiThreads(new Car("five"))); t1.start(); System.out.println("t2---"+t2.isAlive()); t1.join(); t2.start(); System.out.println("t1---t2"+t1.isAlive()+"--"+t2.isAlive()); t2.join(); t3.start(); t3.join(); t4.start(); t4.join(); t5.start(); t5.join(); } } class MultiThreads implements Runnable { private Car car; public MultiThreads(Car car) { super(); this.car = car; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public void run() { try { System.out.println(car.getName() + "-begin"); car.cross(); Thread.sleep(1000); System.out.println(car.getName() + "-end"); System.out.println(); } catch (InterruptedException e) { e.printStackTrace(); } } } class Car { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Car() { super(); } public Car(String name) { super(); this.name = name; } public void cross() { System.out.println(getName() + "----cross through----"); } }