Java多线程

1、线程的五种状态:

1、新建  new Thread()

2、就绪  thread.start()

3、运行  从就绪态获取CPU

4、阻塞  处于运行状态中的线程由于某种原因(wait(),sleep(),join(),I/O),暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。分为 等待阻塞(wait()),同步阻塞(synchronized),其它阻塞(sleep(),join(),I/O())

5、死亡  线程执行完或异常退出


2、线程的创建

1、创建一个MyThread类继承自Thread类,重写run()方法。
2、创建一个MyRunnable类实现Runnable接口,重写run()方法。
3、创建一个MyCallable类实现Callable<Object>接口,重写带返回值的call()方法。
      创建FutureTask<object>类对象,使用FutureTask<object>类包装myCallable对象。
      创建一个Thread类对象,以ft为target,并start该线程。
      通过ft.get()获取返回值。


该部分参考自: http://www.cnblogs.com/lwbqqyumidi/p/3804883.html

3、多线程的阻塞

1、join() 使当前线程阻塞,到下一个线程执行完回来执行该线程
2、sleep()  使当前线程阻塞一定时间,此期间其它线程可以获取CPU时间
3、 setDaemon(true)  使前台进程转变为后台进程。(所有前台进程死亡后,后台进程生命周期结束)
4、setPriority(1~10) 设置优先级,10最大,1最小。正常的线程是5。 较大优先级的线程只是更有几率获取CPU时间,并非优先执行
5、yield() 线程让步,当前进程由运行转为就绪,CPU选取优先级大于等于该优先级的线程执行

该部分参考自:http://www.cnblogs.com/lwbqqyumidi/p/3817517.html

4、多线程的安全

为了避免生产者生产之前,消费者已经试图获取资源。即多个线程同事访问某个共享资源,因此,为避免线程安全问题,应该避免多线程环境下对此共享资源的并发访问。

1、同步方法
在方法前加上synchronized关键字 ,如public synchronized void run()

2、同步代码块
为了防止上锁范围过大,采用同步块锁住需要上锁的部分,obj为锁对象,一般使用共享资源。
synchronized(obj){

}

3、Lock对象同步锁
与共享对象一对一存在。
    // 显示定义Lock同步锁对象,此对象与共享资源具有一对一关系
    private final Lock lock = new ReentrantLock();
    
    public void m(){
        // 加锁
        lock.lock();
        
        //...  需要进行线程安全同步的代码
        
        // 释放Lock锁
        lock.unlock();
    }

4、wait(),notify(),notifyAll()线程间通信
wait() 使当前对象阻塞,不释放资源。直到其它线程调用该同步锁对象的notify()或者notifyAll()方法唤醒此线程。
notify() 择一唤醒在该同步锁外等待的线程,此时当前线程并未释放资源,会继续执行。
notifyAll() 唤醒在该同步锁外等待的所有线程,此时当前线程并未释放资源,会继续执行。

该部分参考自:http://www.cnblogs.com/lwbqqyumidi/p/3821389.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值