线程同步的一些记录

synchronized的使用

1.使用对象锁
方法拥有对象级别的锁,多个线程使用同一个对象的这个方法时,只有一个线程可以使用该方法,如果每个线程使用的都是新建的对象,则不会发生同步。
类可以创建很多对象,每个对象都是自己的动态方法同步代码块的锁
例如:
使用对象锁的方法:
1)
public synchronized void test1(){

}

2)
public void test2(){
    synchronized(this){
        
    }
}
3)
private Object lock = new Object();
public void test3(){
    	synchronized(lock){

    	}
}


2.使用类锁
方法拥有类级别的锁,多个线程使用同一个类的对象的该方法时,只有一个线程可以使用这个方法。
使用类锁的方法:
1)
public static synchronized void test4(){

}

2)
public void test5(){
    	synchronized(this.getClass()){
    		//somecode
    	}
}



线程控制

1.Object.wait() 
把该对象锁的控制权交出去,本线程处于等待状态,直到该对象锁的控权线程执行了notify()方法并使用完这个对象锁后。使用这个方法的线程必须拥有这个对象的锁

2.Object.notify()
通知某个等待本对象锁的线程可以继续执行,当本线程执行完该同步锁本次控制的方法后。使用这个方法的线程必须拥有这个对象的锁

3.Object.notifyAll()
与notify()相同,不同的地方是会通知所有等待本对象锁的线程。使用这个方法的线程必须拥有这个对象的锁

4.Thread.sleep()
使当前线程暂停一段时间,与Object.wait()不同的是,这个方法不会交出对象锁的控制权。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值