11、

Synchronized使用方式
代码块形式
1)、使用到Synchronized锁:任务对象锁
2)、方法(非静态)默认this锁
3)、方法(静态),当前类Class字节码锁

 

i)、this或object

public class TickerThread implements Runnable {

private int count=100;

@Override
public void run() {
while (count>0){
ticket();
}
}


Object object=new Object();
public void ticket(){

//synchronized(object){
synchronized(this){
if(count>0){
try {
Thread.sleep(30);
}catch (Exception e)
{

}
System.out.println(Thread.currentThread().getName()+",当前系统余票【"+count+"】");
System.out.println(Thread.currentThread().getName()+",正在出票第【"+(100-count+1)+"】张");
count--;
if(count==0)
{
System.out.println(Thread.currentThread().getName()+",当前系统的票已售尽,当前系统余票【"+count+"】");
}
}
}

}

public static void main(String arg[])
{
TickerThread tickerThread=new TickerThread();
new Thread(tickerThread,"售票机1号").start();
new Thread(tickerThread,"售票机2号").start();
new Thread(tickerThread,"售票机3号").start();
new Thread(tickerThread,"售票机4号").start();
new Thread(tickerThread,"售票机5号").start();
}

}

ii)、非静
public class TickerThread implements Runnable {

private int count=100;

@Override
public void run() {
while (count>0){
ticket();
}
}

public synchronized void ticket(){
if(count>0){
try {
Thread.sleep(30);
}catch (Exception e)
{

}
System.out.println(Thread.currentThread().getName()+",当前系统余票【"+count+"】");
System.out.println(Thread.currentThread().getName()+",正在出票第【"+(100-count+1)+"】张");
count--;
if(count==0)
{
System.out.println(Thread.currentThread().getName()+",当前系统的票已售尽,当前系统余票【"+count+"】");
}
}
}

public static void main(String arg[])
{
TickerThread tickerThread=new TickerThread();
new Thread(tickerThread,"售票机1号").start();
new Thread(tickerThread,"售票机2号").start();
new Thread(tickerThread,"售票机3号").start();
new Thread(tickerThread,"售票机4号").start();
new Thread(tickerThread,"售票机5号").start();
}

}


iii)、静态
public class TickerThread implements Runnable {

private static int count=100;

@Override
public void run() {
while (count>0){
ticket();
}
}

public static void ticket(){
synchronized(TickerThread.class){
if(count>0){
try {
Thread.sleep(30);
}catch (Exception e)
{

}
System.out.println(Thread.currentThread().getName()+",当前系统余票【"+count+"】");
System.out.println(Thread.currentThread().getName()+",正在出票第【"+(100-count+1)+"】张");
count--;
if(count==0)
{
System.out.println(Thread.currentThread().getName()+",当前系统的票已售尽,当前系统余票【"+count+"】");
}
}
}

}

public static void main(String arg[])
{
TickerThread tickerThread=new TickerThread();
new Thread(tickerThread,"售票机1号").start();
new Thread(tickerThread,"售票机2号").start();
new Thread(tickerThread,"售票机3号").start();
new Thread(tickerThread,"售票机4号").start();
new Thread(tickerThread,"售票机5号").start();
}

}

 

 

 

多线程synchronized锁多线程synchronized锁多线程synchronized锁多线程synchronized锁多线程synchronized锁

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
  • 2021-12-03
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-03
  • 2022-01-13
  • 2022-01-29
  • 2021-04-05
  • 2022-12-23
  • 2022-02-04
相关资源
相似解决方案