Chinaunix首页 | 论坛 | 博客

活出自我

若要人前显贵,必得人后受罪

  • 博客访问: 729922
  • 博文数量: 732
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4040
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(732)

文章存档

2018年(17)

2017年(74)

2016年(170)

2015年(103)

2014年(308)

2013年(60)

分类: Java

2018-01-30 10:53:40

一、先说明启动线程的两种方式:

1、 继承Thread,重载run方法,执行start方法

Class MyThread extends Thread{

      @Override

           Void run(){

}

}

new MyThread().start();

2、 实现Runnable接口

Class MyTask implements Runnable {

      Void run(){}          

}

new Thread( new MyTask()).start();

这里顺便说下 new MyThread().start()new MyThread().run();执行的区别,前者会启动一个线程执行run方法,后者是在本线程中执行run方法

 

二、再明确几个概念:

Callable接口和Runnable接口一样,也可通过实现该接口启动线程,但是Callable接口的run方法有返回值。

Future接口,相当于是对Callable进行了封装:

public interface Future {

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long timeout, TimeUnit unit)

        throws InterruptedException, ExecutionException, TimeoutException;

}

FutureTaskFuture的一个实现,使用实例:

FutureTask futureTask = new FutureTask(new Callable(){});

new Thread(futureTask).start();  

MyResult  r = futureTask.get();

执行start方法后会执行Callablerun方法

调用futureTask get方法会执行,并判断是否执行完,如果run执行完了直接返回结果,否则的话会awaitDone阻塞,当start方法中的Callable方法执行完后会判断有没有阻塞的线程有的话会唤醒(LockSupport.parkNanos阻塞,LockSupport.unpark(thread)唤醒);注意当有多个线程阻塞的时候,是以链表形式存储的,唤醒的时候也是依次唤醒

参考:
https://www.cnblogs.com/cz123/p/7693064.html#top
http://blog.csdn.net/javazejian/article/details/50896505

阅读(22616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册