Java并发小结

来源:互联网 发布:为什么需要云计算 编辑:程序博客网 时间:2024/06/01 15:25

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)

1 0
原创粉丝点击