首页 > 代码库 > 并发包java.util.concurrent.locks.Lock
并发包java.util.concurrent.locks.Lock
** * * @描述: Lock比传统线程模型中的synchronized方式更加面向对象、与生活中的锁类似,锁本身也应该是一个对象,两个线程执行的代码片段要实现同步互排的效果 * 它们必须用同一个LOCK,锁是上线代表要操作的资源内部类的内部方法上,而不是线程的方法中 . * @作者: Wnj . * @创建时间: 2017年5月16日 . * @版本: 1.0 . */public class LockTest { /** * @param args */ public static void main(String[] args) { new LockTest().init(); } private void init() { final Outputer outputer = new Outputer(); //A new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //如果A线程还没打印完成,B线程就被调度执行,那么打印就不完整 outputer.output("zhangxiaoxiang"); } } }).start(); //B new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } outputer.output("lihuoming"); } } }).start(); } /** * * @描述: 锁是上线代表要操作的资源内部类的内部方法上 * @作者: Wnj . * @创建时间: 2017年5月16日 . * @版本: 1.0 . */ static class Outputer { Lock lock = new ReentrantLock(); /** * 使用lock * <功能详细描述> * @param name */ public void output(String name) { int len = name.length(); lock.lock(); try { for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } finally { lock.unlock(); } } /** * 使用synchronized * <功能详细描述> * @param name */ public synchronized void output2(String name) { int len = name.length(); for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } /** * 使用synchronized * <功能详细描述> * @param name */ public static synchronized void output3(String name) { int len = name.length(); for (int i = 0; i < len; i++) { System.out.print(name.charAt(i)); } System.out.println(); } }}
并发包java.util.concurrent.locks.Lock
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。