标签:run Thread 静态 Lock 接口 线程 new ticket
静态同步方法
静态同步方法:
锁对象是谁?
不能是this, this是创建对象之后产生的,静态方法优先于对象
静态方法的锁对象是本类的class属性-->class文件对象(反射)
解决线程安全问题_Lock锁
线程安全问题的第三种方案: 使用Lock锁
java.util.concurrent.locks.Lock接口
Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。
Lock接口中的方法:
void lock()获取锁。
void unlock() 释放锁。
java,util.concurrent.locks.RenntrantLock implements Lock接口
使用步骤:
1.在成员位置创建一个ReentrantLock对象
2.在可能会出现安全问题的代码前调用Lock接口中的方法lock获取锁
3.在可能会出现安全问题的代码后调用Lock接口中的方法unlock释放锁
class Runna implements Runnable{ //定义一个多线程共享的票 private int ticket = 100; //创建一个锁对象 Object obj = new Object(); //1.在成员位置创建一个ReentrantLock对象 Lock l = new ReentrantLock(); @Override public void run() { //使用死循环.让卖票操作重复执行 while (true){ //2.在可能会出现安全问题的代码前调用Lock接口中的方法lock获取锁 l.lock(); if (ticket>0){ try { Thread.sleep(100); //票存在,卖票 ticket-- System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票"); ticket--; } catch (InterruptedException e) { e.printStackTrace(); }finally { //3.在可能会出现安全问题的代码后调用Lock接口中的方法unlock释放锁 l.unlock(); } } } } }
public static void main(String[] args) { Runna run = new Runna(); new Thread(run).start(); new Thread(run).start(); new Thread(run).start(); }
搜索
复制
标签:run,Thread,静态,Lock,接口,线程,new,ticket 来源: https://www.cnblogs.com/pengtianyang/p/16462571.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。