静态的同步方法
锁对象是谁
不能是this
this是创建对象之后产生的,静态方法优先于对象
静态方法的所对象是本类class属性---》class文件对象
举例:
Lock锁
从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。
ReentrantLock类实现了Lock ,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示锁,释放锁
synchronized与lock的异同:
相同点:二者都可以解决线程安全问题
不同点:synchronized机制为执行完相应同步代码块后,自动释放同步监视器,而lock则需要手动启动同步(使用lock()方法),并且结束同步也需要手动实现(使用unlock()方法)
作用:Lock锁可以解决并发编程中出现多个线程同时访问一个共享
优势:Lock锁可以让某个线程在持续获取同步锁失败后返回,不再继续等待,Lock锁在使用时也更加灵活。
加锁lock
释放锁unlock
举例:
public class Runnablesd implements Runnable{ static int ticket = 100; Lock object = new ReentrantLock(); @Override public void run() { while (true){ object.lock(); if (ticket<=0){ object.unlock(); break; } try { Thread.sleep(10); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName()+ticket); ticket--; object.unlock(); } } }
public static void main(String[] args) { Runnablesd runnablesd = new Runnablesd(); Thread thread = new Thread(runnablesd); Thread thread1 = new Thread(runnablesd); Thread thread2 = new Thread(runnablesd); thread.start(); thread1.start(); thread2.start(); }