[javaSE] 多线程(售票例子)

需求:简单的买票程序,多个窗口卖票,多线程

定义一个类Ticket实现Runnable接口,

定义成员属性int类型的票数nums

实现run()方法,run方法中

while(true)的死循环,打印nums--

获取Ticket对象,new出来

获取Thread()对象,new出来,构造参数:Runable对象

调用Thread对象的start()方法,开启线程

此时会有线程安全问题,使用synchronized同步代码块解决安全问题

避免死锁问题,同步中嵌套同步,而锁不同

class Ticket implements Runnable {
    private int nums = 100;

    @Override
    public void run() {

        while (true) {
            synchronized (this) {
                if (nums > 0) {
                    try {
                        Thread.sleep(10);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "==="
                            + (nums--));
                }else{
                    break;
                }

            }
        }
    }

}

public class TicketDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(ticket).start();
        new Thread(ticket).start();
        new Thread(ticket).start();
        new Thread(ticket).start();
    }

}

时间: 2024-10-09 23:33:35

[javaSE] 多线程(售票例子)的相关文章

JavaSE:多线程总结(Thread)

今天来进行JavaSE多线程的总结: 先从几个概念说起: 程序:是一组指令的集合,一段静态的代码. 进程:每一个运行的程序,都会对应一个进程. 线程:一个进程中包含一个或多个线程,如果包含多个线程,那么这个程 序就是支持多线程的. 多线程的优点: ①提高了计算机对CPU的利用率. ②提高了程序的响应速度 线程的创建,运行 线程的创建: ①继承Thread类:必须重写run()方法 ②实现Runnable接口:必须实现run()方法 通常将run()的主体称为线程体 线程的启动: 通过start(

python两段多线程的例子

记录瞬间 =====================其一===================== # coding:UTF-8 import os import threading from time import ctime def loop(loops, list): # list存放着每个线程需要处理的文本文件名 print('线程 %d 处理的文件列表 %s \n' % (loops + 1, list)) list_len = len(list) for i in range(lis

多线程 小例子

1. 线程小例子  /** * 失去一日甚易,欲得回已无途! * 2016-11-17下午1:43:51 * * 进程:可以包含一个或者多个线程! cpu上 真正 执行的 是 线程! * * 实现多线程的方法: * 01.继承Thread类 重写run() * 02.实现Runnable接口 重写run() * * 多线程:在单个程序中,同时运行多个线程来完成不同的工作! 多个线程 并发 执行的技术! * * 并发:在同一个时间段中 有几个程序 都处于 启动运行 到 运行完毕 之间! * 计算机

JavaSE:多线程补充--线程通信

线程通信我认为是多线程中最难掌握的部分了,这里通过两个例子来说明一下. 第一个: 使用两个线程打印 1-100. 线程1, 线程2 交替打印 public class Print implements Runnable{ int i = 1; public void run(){ while(true){ synchronized(this){ if(i<100){ notify(); System.out.println(Thread.currentThread().getName() + &qu

多线程售票系统的感想

package 异常练习;class Seel implements Runnable{ private String name; private int ticket=100; Seel(String name){  this.name=name; } public void run(){  while(true){   if(ticket>0){    System.out.println(Thread.currentThread().getName()+"正在售票"+&qu

QT多线程简单例子

在Qt中实现多线程,除了使用全局变量.还可以使用信号/槽机制. 以下例子使用信号/槽机制. 功能: 在主线程A界面上点击按钮,然后对应开起一个线程B.线程B往线程A发送一个字符串,线程A打印出来. 1.工程文件目录 2.thread.h 和thread.cpp #ifndef THREAD_H #define THREAD_H #include<QThread> #include<QString> class Thread : public QThread { Q_OBJECT p

多线程售票模型

上次Java实验课就写了一次,但是比较简单,这里再好好写一下 这里用集合类LinkList来存储车票 注意线程是抢占式时的,虽然在出票的时候是一个个出的,但是在Sysout.out.println()的时候被其他线程抢占,所以输出可能不是顺序的,这里用sleep方法之后就顺序输出了,为什么? 一般不用加sleep,因为后台出票的时候确实是一个个按照顺序出的.只是在打印的时候抢占了. package com.ticket.thread; import java.util.LinkedList; i

[javaSE] 多线程(守护线程)

我们一般使用多线程,都是while的死循环,想要结束线程,只需退出死循环即可 当线程中调用了sleep()方法或者wait()方法,当前的线程就会进入冻结状态,这个线程就结束不了 调用Thread对象的interrupt()方法,可以强制解冻,此时run()方法中需要捕获到InterruptException异常,然后进行处理,就可以关闭线程了 调用Thread对象的setDaemon()方法,参数:true 守护线程是后台线程,当前台线程全都结束以后,后台线程自动结束 class Ticket

JavaSE多线程下载的实现

本文中主要提供的是java多线程下载文件方案,以及java多线程将临时进度保存到文件,多线程断点续传的实现: 1.多线程下载 2.将下载进度保存到临时文件,多线程的断定续传 1.多线程下载 本例中首先在Tomcat服务器中的WEBAPP/ROOT/文件夹下面放置了SoftwareOffer.exe的二进制可执行文件,如果放置图片的话,中间数据如果出错,不容易用肉眼识别,但是如果是二进制文件的话,如果中间任何二进制的一位数据出错,必然造成二进制可执行文件无法运行!所以测试选择二进制可执行文件比较妥