Process Thread

线程有四种状态:

            1) 创建(new)

            2) 就绪(Runnable)

            3) 阻塞(Blocked)

            4) 结束(Dead)

       

线程在以下情况下,会进入阻塞状态:      

1) 调用sleep()

2) 调用wait()

3) I/O阻塞;因获取其他对象的对象锁而阻塞。

   

        wait notify的使用:

        

wait notify的使用

 

1) 这两个方法都必须是在synchronized代码块或方法中使用。

2) wait一般是自己调用。而别人再进行notify()

 

调用sleep()的时候,锁并没有释放;而wait()方法的确释放了锁。这意味着在调用wait()期间,可以调用线程中对象的其他同步控制方法。

 

 

在多线程并发的情况下,使用yield()这个让步方法。可以让并发更加均衡。

 

 

sleep(),wait(),join()方法都必须进行try...catch,因为都有可能受interrupt所影响。

 

    synchronized注意的地方: 

        

synchronized代码块是对指定的对象进行加锁;synchronized方法是对本身对象进行加锁,等同于synchronized(this){}

所以两者从机制上,没有大的区别。

 

 

注意,互斥只有在竞争者之间才会互斥;即只有争夺共享锁的之间才会互斥。

例如以下代码中,在调用sync1()的时候,同时再调用sync2(),则会互斥。而同时调用notSync()则不会互斥。

package bison.sample;

 

public class SynchronizedDemo {

 

    public synchronized void sync1() {

       try {

           System.out.println("sync1 start sleep...");

           Thread.sleep(10 * 1000);

           System.out.println("sync1 end sleep");

       } catch (InterruptedException e) {

           e.printStackTrace();

       }

    }

    

    public synchronized void sync2() {

       try {

           System.out.println("sync2 start sleep...");

           Thread.sleep(10 * 1000);

           System.out.println("sync2 end sleep");

       } catch (InterruptedException e) {

           e.printStackTrace();

       }

    }

    

    public void notSync(){

        System.out.println("notSync hello");

    }

 

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值