一.JDK5的Lock锁:
Lock o = .....;
o.lock();
try{
}finally{
o.unlock();
}
二.死锁问题:
1.基于同步锁,当锁定某对象时,其它对象会对此对象进行访问,在不释放锁的情况下,其它线程会一直等待;
如果双方线程都在如此等待时,这就是:死锁;
2.死锁问题的解决:见:"什么是死锁及死锁的必要条件和解决方法.doc"
三.生产消费者问题:
1.一方生产,一方消费:此例只适用于"单生产"和"单消费"的情况;
2.解决:
在共享资源内部,当资源没有准备好时,可以让当前访问的线程等待:Object-->wait();
在准备好资源后,可以唤醒等待的线程:notify():唤醒一个线程;
notifyAll():唤醒所有等待的线程;
四.线程组:
1.线程都有线程组,默认线程组:main;
2.设定线程组:
1).实例化我们的线程类;
2).实例化线程组;
3).实例化一个Thread,传递参数:线程组对象、线程对象、线程名称
MyThread myT1 = new MyThread();
ThreadGroup group = new ThreadGroup("我的线程组");
Thread t = new Thread(group,myT1,"线程1");
3.线程组的意义:
可以对多个线程进行统一管理,可以统一执行操作;例如:一次性停止线程组内的所有线程;
五.线程池:
1.JDK5之后;
2.实现方式:
1).获取线程池:
ExecutorService service = Executors.newFixedThreadPool(2);
//调用service的submit()方法
MyThread t1 = new MyThread();
Future<?> result = service.submit(t1);
//获取返回值:
Object value = result.get();
2).可以反复的运行线程池中的线程对象
service.submit(t1);
六.JDK5的线程实现方式:
1.实现Callable接口
2.重写call()方法;
3.启动:
使用线程池的方式;
特点:JDK5的线程方式可以获取返回值,并且call方法可以抛出异常;
七.定时器
1.TimerTask(抽象类):定义任务:
1).自定义类,继承自TimerTask;
2).重写run()方法;
2.Timer(类):启动定时器,执行任务;
1).实例化一个Timer();
2).public void schedule(TimerTask task, long delay):在指定的时间执行指定的任务。只执行一次。
public void schedule(TimerTask task,long delay,long period):在指定的时间,执行任务,并每隔period时间,反复的执行;
八.设计模式:
1.简单工厂模式:
2.工厂方法模式:
3.单例模式:
1).饿汉式
2).懒汉式
|
|