Callable是对具有返回值得线程进行执行的线程
Runnable是对无返回值的线程执行的线程
Future是对具体的Runnable和callable执行结果进行取消,查询是否完成,获取结果,必要还是get方法获取执行结果
Public interface Future<V>{
Booleancancel(Boolean mayInterruptIfRunning);
BooleanisCancelled();
BooleanisDone();
V get() throws InterruptException,ExecutionException;
V get(long timeout, TimeUnit uint) throws InterruptException, ExecutionException, TimeoutException;
}
内部类创建的方法:
Public class callable{
ClasscallTest implement Callable<Integer>{…………….}
Publicstatic void main(String[] args){
callTestcall = new callable().new callTest(); //Java内部类在其中创建的方法
}
Future<>只是一个接口
FutureTask是一个类
Public class Future<V> implementsRunnableFuture<V>
而RunnableFuture接口是继承了Runnable和Future<V>
Public interface RunnabelFuture<V>extends Runnable, Future<V>{
Publicvoid run(){}
}
FutureTask是Future接口的唯一实现类
Synchronized(this)与synchronized(staticxxx)的区别,synchronized就是针对内存区块申请内存锁,this关键字代表类的一个对象,所以其内存锁死针对相同对象的互斥操作,而static成员属于类专有,其内存空间未该类所有成员共有,导致synchronized()对static成员枷锁,相当于对该类加锁,也就是在该类所有成员实现互斥,同一时间只有一个线程可以访问该类的实例。
线程间相互唤醒用object.wati(),object.notify(); object.wati()与object.notify()必须与synchronized(object){}同时使用,也就是wait与notify是针对已经获取了object锁进行操作,从语法角度,object.wait()与object.notify()必须在synchronized(object){}语句块内。
注意,notify调用后不是马上释放对象锁,而是在相应的synchronized(){}执行结束后自动释放锁,此后,jvm会在wait对象锁的线程中随机选取一个线程赋予其对象锁。
Java中Blockingqueue:
BlockingQueue中的方法:
1. Offer(anObject)可能则间anObject加入队列
2. Put(anObject)将anObject加入队列,如果队列没有空间则阻塞,等待有空间再继续
3. Poll(time)取走BlockingQueue里排在首位的对象,time参数规定时间
4. Take()取走队列排在首位的对象,如果队列空,阻塞等待其中有数据可取
5. drainT0() 一次性从队列中获取所有可用对象
BlockingQueue中成员介绍:
1. ArrayBlockingQueue基于数组的阻塞队列实现
2. LinkedBlockingQueue基于链表的阻塞队列实现
3. DelayQueue
4. PriorityBlockingQueue基于优先级的阻塞队列
5. SynchronousQueue无缓冲等待队列,类似无中介会直接交易
PipedReader提供的API如下:
//构造方法
PipedReader(PipedWriter src) //使用默认的buf的大小和传入的pw构造pr
PipedReader(PipedWriter src, int pipeSize) //使用指定的buf的大小和传入的pw构造pr
PipedReader() //使用默认大小构造pr
PipedReader(int pipeSize) //使用指定大小构造pr
//关闭流
void close()
//绑定Writer
void connect(PipedWriter src)
//是否可读
synchronized boolean ready()
//读取一个字符
synchronized int read()
//读取多个字符到cbuf
synchronized int read(char cbuf[], int off, int len)
//Writer调用, 向Reader缓冲区写数据
synchronized void receive(int c)
synchronized void receive(char c[], int off, int len)
synchronized void receivedLast()
PipedWriter提供的API如下:
//构造方法
PipedWriter(PipedReader snk)
PipedWriter()
//绑定ReaderWriter
synchronized void connect(PipedReader snk)
//关闭流
void close()
//刷新流,唤醒Reader
synchronized void flush()
//写入1个字符,实际是写到绑定Reader的缓冲区
void write(int c)
//写入多个字符到Reader缓冲区
void write(char cbuf[], int off, int len)