您的位置:首页 > 编程语言 > Java开发

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: