一、synchronized关键字
1.可以用来修饰代码块
synchronized (this) { // 同步的关键字 this 表示当前线程对象 if (num == 0) { break; } num--; System.out.println(Thread.currentThread().getName()+"买了第"+(50-num)+"张票,剩余"+num+"张"); }
2.可以用在方法上 修饰同步方法
//同步的方法在上边我们写好的 循环中调用
while (true) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(sellTicket()) {
break;
}
}
private synchronized boolean sellTicket() { if(num>0) { // 同步的关键字 this 表示当前线程对象 num--; System.out.println(Thread.currentThread().getName() + "买了第" + (10 - num) + "张票,剩余" + num + "张"); return false; }else { return true; } }
二、lock接口
1.用此接口要用 ReentrantLock l = new ReentrantLock(); ReentrantLock 实现类 l 表示实现类对象
通过其实现类对象来调用Lock()这个方法来开启同步锁
然后通过该对象在同步代码 结束的后边来释放同步锁
try { l.lock(); // 同步的关键字 this 表示当前线程对象 if (num == 0) { break; } num--; System.out.println(Thread.currentThread().getName() + "买了第" + (50 - num) + "张票,剩余" + num + "张"); } catch (Exception e) { // TODO: handle exception } finally { l.unlock(); }
不过最好把释放同步锁的动作放在 finally中
这样无论同步代码中是否出现异常 都会释放这个同步锁 ,而不会导致死锁的问题。
小结;synchronized 和lock接口的区别
文章来源:https://www.toymoban.com/news/detail-711315.html
暂时大概就是这些了,后续想到的话再补充文章来源地址https://www.toymoban.com/news/detail-711315.html
到了这里,关于线程中synchronized关键字和lock接口的异同的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!