遇到的问题:

多线程生产者与消费者模型;尚未解决!



jar

---------------

jar cvf xxx.jar -C classes/ .



进程

-----------------

进程之间内存式隔离的。内存不共享。


线程

-----------------

程序执行过程中,并发执行的代码段。

线程之间可以共享内存。


Thread : 线程类。

start()//通知cpu,可以开始执行该线程。

run()//线程具体执行的代码段。

Thread t = new Thread();

t.start();

Thread.currentThread()//得到当前的执行线程。


yield()//让线程放弃cpu的抢占权。

sleep(int mils)//让当前线程休眠指定的毫秒数.


线程安全:增加了同步处理。确保在同一时刻,只有一个线程执行同步代码。

同步方法使用的当前对象作为同步对象。

静态方法可以加同步处理,使用Class作为同步对象。


KTV : 

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----");
}
}