java多线程
2016-05-07 21:06
225 查看
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
1、原子操作:多个线程执行同一个操作是,任何一个线程要么完全执行完此操作,要么没有执行任何操作,就成为原子操作,出现原因:synchroized的代价较高;
2、JUC使用volatile代替了synchroized的锁,volatile不加锁,只是对字段的更新以可预见的方式告知其他线程,不能保证线程安全,volatile只能保证可见性,其操作不是原子性的,每次都从主存中读取volatile变量的结果/
3、CAS(Compare
and Swap)操作:
http://blog.csdn.net/china_wanglong/article/details/38828407 TBSchedule任务调度管理任务框架管理: http://blog.csdn.net/strawbingo/article/details/44651703 http://www.cnblogs.com/dolphin0520/
Dubbo入门:http://www.iteye.com/magazines/103
进程:是资源分配的单位(分配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
1、原子操作:多个线程执行同一个操作是,任何一个线程要么完全执行完此操作,要么没有执行任何操作,就成为原子操作,出现原因:synchroized的代价较高;
2、JUC使用volatile代替了synchroized的锁,volatile不加锁,只是对字段的更新以可预见的方式告知其他线程,不能保证线程安全,volatile只能保证可见性,其操作不是原子性的,每次都从主存中读取volatile变量的结果/
3、CAS(Compare
and Swap)操作:
http://blog.csdn.net/china_wanglong/article/details/38828407 TBSchedule任务调度管理任务框架管理: http://blog.csdn.net/strawbingo/article/details/44651703 http://www.cnblogs.com/dolphin0520/
Dubbo入门:http://www.iteye.com/magazines/103
相关文章推荐
- Java线程详解
- Spring记录之Spring的基本概念
- 第十四章 springboot + profile(不同环境读取不同配置)
- eclipse最常用的10种快捷键组合
- Eclipse Che开发Spring Web应用(入门) (二)
- springMVC知识点学习笔记
- java学习总结(16.05.07) jdk的安装与环境变量的配置
- java学习之final关键字
- 设计模式--观察者模式初探和java Observable模式
- 04 Java API
- Java集合框架
- java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger
- 如何学好java?
- java第6次作业
- 01 Java语法
- 00 Java入门摘要
- 学习Java九大内置对象
- java多线程学习-java.util.concurrent详解(一) Latch/Barrier
- Eclipse中使用JNI编写C代码时出现“Unresolved inclusion: <***.h>”的解决方案
- Spring面试题和答案