synchronized关键字,用于解决线程同步问题

it2023-08-30  66

synchronized关键字,用于解决线程同步问题 此案例中,如果没有同步锁,则会在同一时间卖出相同的票。 1.synchronized修饰代码块时,一个时间段内只能有一个线程得到执行。 另一个线程必须等待当前线程执行完这个代码块后才能执行该代码块 2.synchronized修饰某个方法时,表明这个方法只能执行一个线程,其他线程处于等待状态 3.synchronized修饰某个类的声明时,表明这个类中的所有方法都是synchronized(同步)的

用同步锁解决售票并发问题的程序源代码:

package JAVA_Test4; import java.util.Random; /* */ public class SellTicketRunnableImpl implements Runnable{ Object oj1 = new Object(); static int nums = 200; /*@Override //用同步锁修饰代码块 public void run() { while(true){ synchronized(oj1){ if(nums>0){ System.out.println(Thread.currentThread().getName()+"->第"+nums+"张票"); nums--; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } else break; } } }*/ //用同步锁修饰方法体 @Override public void run(){ while(true){ //被同步锁锁住的方法 Complete(); if(nums<=0) break; } } //用同步锁锁住的方法 public synchronized void Complete(){ if(nums>0){ System.out.println(Thread.currentThread().getName()+"->第"+nums+"张票"); nums--; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { SellTicketRunnableImpl r = new SellTicketRunnableImpl(); new Thread(r).start(); new Thread(r).start(); new Thread(r).start(); } }
最新回复(0)