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

Java多线程_复习

时间:2018-12-08 11:31:14      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:stack   system   多线程   分享   技术分享   esc   try   通信   sleep   

java多线程的常见例子

一.相关知识:

Java多线程程序设计到的知识:

(一)对同一个数量进行操作

(二)对同一个对象进行操作

(三)回调方法使用

(四)线程同步,死锁问题

(五)线程通信

 等等

二.示例一:三个售票窗口同时出售20张票;

 

程序分析:1.票数要使用同一个静态值

 2.为保证不会出现卖出同一个票数,要java多线程同步锁。

设计思路:1.创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!

2.创建主方法调用类

 

(一)创建一个站台类,继承Thread

package com.com.shundong.thread;

/**
 * @ClassName Station
 * @Description 三个售票窗口同时出售20张票
 * @Author shundong
 * @Date 2018/12/8 12:31 AM
 * @Version 1.0
 **/
public class Station extends Thread {
    // 通过构造方法给线程名字赋值
    public Station(String name) {
        super(name);// 给线程名字赋值
    }

    // 为了保持票数的一致,票数要静态
    static int tick = 20;

    // 创建一个静态钥匙
    static Object ob = "test";//值是任意的

    // 重写run方法,实现买票操作
    @Override
    public void run() {
        while (tick > 0) {
            synchronized (ob) {// 这个很重要,必须使用一个锁,
                // 进去的人会把钥匙拿在手上,出来后才把钥匙拿让出来
                if (tick > 0) {
                    System.out.println(getName() + "卖出了第" + tick-- + "张票");
                    //tick--;
                } else {
                    System.out.println("票卖完了");
                }
            }
            try {
                sleep(1000);//休息一秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    // for test
    public static void main(String[] args) {
        Station station1 = new Station("站台一");
        Station station2 = new Station("站台二");
        Station station3 = new Station("站台仨");
        station1.start();
        station2.start();
        station3.start();
    }
}

程序运行结果:  

技术分享图片

可以看到票数是不会有错的!

Java多线程_复习

标签:stack   system   多线程   分享   技术分享   esc   try   通信   sleep   

原文地址:https://www.cnblogs.com/shundong106/p/10086340.html

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