Thread
1.1
public class Myclass implements Runnable // super class is Runnable
{
public void run() //
{
code....
}
}
Thread th = new Thread( new Myclass() ); // create new thread;
th.start() //calling run()
1.2
//线程管理框架,Executor接口用来创建并管理一组Runnable对象的线程,这组线程被称为thread pool。
Executor 可以复用已有线程。
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
ExecutorService thex = Executor.newCachedThreaPool();
thex.execute( new Myclass() );
2 同步
2.1
同步共享语句, 用 synchronized
code2相当于原子操作,functiion同时只能被一个线程调用
public synchronized void function()
{
code2...
}
2.2
ArrayBlockingQueue 进行同步;
ArrayBlockingQueue<Interger> buffer;
buffer.put( value );
buffer.take();
2.3
wait(), 释放对象的监控所,线程维持在等待状态。
notify(); 使等待的线程转换到“可运行”态。
notifyAll(); 使所有线程转换到可运行态 ,但是只有一个线程获得监控锁。
2.4
Lock 和 Condition 接口
ReentrantLock 类可以指定创建的锁是否带有公平机制。只要Lock被某个线程获得,则在它释放这个Lock前,这个Lock对象不能被另一个线程获得。unLock 释放锁。 条件对象(condition object)可以使用await()进行条件等待。例如生产者,消费者中生产者可以在某个对象上等待,而消费者可以在另一个对象上等待。这是相比使用synchronized关键字更强大的功能。await()会立即释放掉相关联的Lock(),并将当前线程之余这个Condition的“等待”状态中。然后其他线程可以尝试获得Lock()。当“可运行”线程完成了任务并判断出“等待”线程可以继续时,“可运行”线程会调用Condition方法signal(),使得处于Condition且“等待”状态时间最长(默认下)的线程能够返回到“可运行”状态。signalAll则在等待这个条件的所有线程都会转到“可运行”状态并有可能获得Lock。完成对共有对象操作时,必须调用unLock()。
private final Lock accesslock = new ReentrantLock();
Condition cw = accesslock.newCondition();
Condition cr = accesslock.newCondition();
public void set()
{
accesslock.lock();
try
{
cw.await();
................................................
cr.signal();
}
finally
{
accesslock.unlock();
}
}