遇到的问题: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----"); } }