码迷,mamicode.com
首页 > 编程语言 > 详细

实现多线程的两种方式,卖票场景,亲测可用

时间:2018-10-24 17:46:12      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:bsp   style   date   imp   共享   public   extends   config   继承   

写在开始

卖票场景:

  多线程共同卖票,总票数在多个卖票窗口共享

实现方式:

  1继承Thread类;

  2实现Runnable接口

正文开始

方式1 Thread继承

package com.example.demo;

/**
 * @Description:
 * @Author:tianminghai
 * @Date:2:55 PM 2018/10/24
 */
public class ThreadDemo extends Thread {

  private static int ticket = 100000;

  public ThreadDemo() {

  }

  @Override
  public void run() {
    while (true) {
      synchronized ("") {
        if (ticket > 0) {
          ticket--;
          System.out.println("当前线程号:" + Thread.currentThread().getId() + "剩余票数:" + this.ticket);
        }
      }
    }
  }

}

方式2 实现Runnable

package com.example.demo;

/**
 * @Date:2:55 PM 2018/10/24
 */
public class ThreadDemo2 implements Runnable {

    private static int ticket = 100;

    public ThreadDemo2() {

    }

    @Override
    public void run() {
        while (true) {
            synchronized ("") {
                if (ticket > 0) {
                    ticket--;
                    System.out.println("当前线程号:" + Thread.currentThread().getId() + "  剩余票数:" + this.ticket);
                }
            }
        }

    }

}

Client端

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        for (int i = 0; i < 30; i++) {
            // 方式1
            new ThreadDemo().start();
            // 方式2
            new Thread(new ThreadDemo2()).start();
        }
    }
}

 

需要注意的点

    1由于总票数在多个卖票窗口共享,所以ticket应设为静态变量;

  2下面两种多线程实现方式都要使用synchronized进行封装,且封装的粒度要小不可以包含while等代码段

实现多线程的两种方式,卖票场景,亲测可用

标签:bsp   style   date   imp   共享   public   extends   config   继承   

原文地址:https://www.cnblogs.com/tianmh/p/9844538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!