admin 管理员组

文章数量: 1086019

同步锁(synchronized)

同步锁

概念:

  • 把有可能出现问题的代码包起来,一次只让一个线程执行。通过sychronized关键字实现同步。

  • 当多个对象操作共享数据时,可以使用同步锁解决线程安全问题。

      synchronized(对象){需要同步的代码;}
    

特点:

  • 前提1,同步需要两个或者两个以上的线程。
  • 前提2,多个线程间必须使用同一个锁。
  • 同步的缺点是会降低程序的执行效率, 为了保证线程安全,必须牺牲性能。
  • 可以修饰方法称为同步方法,使用的锁对象是this。
  • 可以修饰代码块称为同步代码块,锁对象可以任意。

测试:

public class 同步锁synchronized {public static void main(String[] args) {ticket TT =new ticket();Thread t1 =new Thread(TT,"售票员1");Thread t2 =new Thread(TT,"售票员2");t1.start();t2.start();}}class ticket implements Runnable{private int tic =400;@Overridepublic void run() {// 把有线程安全问题的代码,用同步关键字包起来// 原理:用一个对象作为一把锁,给代码上锁,一个线程访问锁代码时,其他线程只能等待锁释放才能进来。// 多线程间要使用同一把锁才可以真的把代码锁住实现线程安全。// synchronized (new Object()) {//锁了不同对象// synchronized (obj) {//锁了同一个对象//synchronized (Ticket2.class) {//锁了本类,针对于静态while (true) {synchronized (this) {if (tic > 0) {//执行卖票操作System.out.println(Thread.currentThread().getName()+"-----"+tic--);}}}}
}

本文标签: 同步锁(synchronized)