java多线程

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值