目录
一:Lock锁的使用(解决同步问题)
二:例子
三:同步的特点
(1)同步的前提
(2)同步的好处
(3)同步的弊端
一:Lock锁的使用(解决同步问题)
虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock由于Lock是接口所以接口多态。
Lock lock = new ReentrantLock();//接口多态
方法:
void lock() 加锁
void unlock()释放锁
注意要加try( lock)和finall(unlock)
二:例子依旧与上一篇线程安全一样用卖票例子
package day33; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Thread1 implements Runnable {//自定义类实现 Runnable重写run方法 int tickets=100; boolean b=true; Lock lock= new ReentrantLock();//用接口多态创建锁对象 @Override public void run() { while(b) try {//加锁 lock.lock(); if(tickets>0){ System.out.println(Thread.currentThread().getName()+"正在卖第"+tickets--+"张票"); } if(tickets<=0){ b=false; } } finally { lock.unlock();//释放锁 } } }
package day33; public class SellTickets { public static void main(String[] args) { Thread1 thread1 = new Thread1();//创建继承Runnable接口类的对象 //创建三个线程 Thread w1 = new Thread(thread1, "窗口一"); Thread w2 = new Thread(thread1, "窗口二"); Thread w3 = new Thread(thread1, "窗口三"); //启动线程 w1.start(); w2.start(); w3.start(); } }
三:同步的特点 (1)同步的前提
多个线程 多个线程使用的是同一个锁对象
(2)同步的好处同步的出现解决了多线程的安全问题。
3)同步的弊端当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)