1.线程与进程的区别:
进程:是资源分配的单位(分配CPU,代码块,数据等),一个程序就是一个进程,一个进程包含多个线程,只有一个线程的进程称为单线程
线程:是资源调度的单位,多个线程同时调度共享一个进程的资源
2.线程的状态: 新建状态、运行run、阻塞(blocked)、暂停stop、休眠sleep、死亡dead
注:start线程不等于run线程
3.实现方法: 实现Thread类(Thread类也是实现Runable接口的run方法)、或者实现Runable接口的run方法
(1)继承Thread类实现多线程:调用start方法,启动后等待CPU调取
(2) 实现Runnable接口,使用了静态代理,使用Thread类作为代理角色,只需定义自己的真实角色,推荐使用该方法,因为可避免创建代理角色,方便共享资源
(3)以上两者不能声明异常(Runnable对异常只能try catch,不能throw 异常)且没有返回值,故有了:Callable
4.线程的状态:
Timer类:是一个工具类,用来调度一个线程,用于执行定时任务的
执行定时任务的步骤:
(1)建立一个要执行的任务TimerTask
(2) 创建一个Timer类,通过Timer类的schedule()方法,将TimerTask任务添加到定时器Timer中,同时设定规则即可
5、第三种:实现ExecutorService、Callable、Future接口来实现有返回结果且可以抛出异常的多线程,这三个对象实际上都是属于Executor框架中的功能类,要实现该方法就需要如实现Runable接口一样:
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口
参考:http://blog.csdn.net/aboy123/article/details/38307539
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了
文字来源:http://blog.csdn.net/ghsau
JUC的几个接口:
- Atomic : AtomicInteger
- Locks : Lock, Condition, ReadWriteLock
- Collections : Queue, ConcurrentMap
- Executer : Future, Callable, Executor
- Tools : CountDownLatch, CyclicBarrier, Semaphore