买票问题-线程的同步

 1 //买票问题
 2 package ThreadL;
 3
 4 public class Thread9 {
 5     public static void main(String[] args){
 6         Thread th1 = new Thread(new Thread9L(),"AAA");
 7         Thread th2 = new Thread(new Thread9L(),"BBBBBB");
 8         th1.start();
 9         th2.start();
10     }
11 }
12 class Thread9L implements Runnable{
13     static int ticket = 100;
14     static int count = 0;
15     public void run(){
16         while(true){
17             synchronized("L")    //动作原语
18             {
19                 if(ticket>0){
20 /*                    try {
21                         Thread.sleep(1000);
22                     } catch (InterruptedException e) {
23                         // TODO Auto-generated catch block
24                         e.printStackTrace();
25                     }
26 */                    System.out.println(Thread.currentThread().getName() + "\t出售第\t" + ticket-- + "\t张车票。");
27                     count++;
28                 }else{
29                     System.out.println(Thread.currentThread().getName() + "\t已售完。\t" + count);
30                     break;
31                 }
32             }
33         }
34     }
35 }
时间: 2024-11-09 16:07:29

买票问题-线程的同步的相关文章

synchronized (lock) 买票demo 线程安全

加锁防止多个线程执行同一段代码! /** http://blog.51cto.com/wyait/1916898 * @author * @since 11/10/2018 * 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票. * 同步的特点: * 前提: 多个线程 * 解决问题的时候要注意: 多个线程使用的是同一个锁对象 * 同步的好处:同步的出现解决了多线程的安全问题. * 同步的弊端:当线程相当多时,因为每个线程都会去判断同步上的锁,这

java的线程问题同步与互斥

以前学过java的线程,但是当时对Tread的理解不是很深,对于里面的同步与互斥,生产者与消费者问题,理解的不够深入,这次又从新学习java的多线程,感觉对线程的理解更加的深入了,觉得有必要写下博客记录下. 本文原创,转载请著明:http://blog.csdn.net/j903829182/article/details/38420503 1.java实现线程的方法: 1.实现Runnable接口,重写run方法,通过Thread的start方法启动线程.这种方法可以实现资源的共享 2.继承T

线程模拟买票

存在问题:这时候启动了四个线程,那么tickets是一个成员变量,也就是在一个线程对象中都维护了属于自己的tickets属性,那么就总共存在了四份. 解决方案一:tickets使用staitc修饰,使每个线程对象都是共享一份属性. 1.1 创建线程的方式二 创建线程的第二种方式.使用Runnable接口. 该类中的代码就是对线程要执行的任务的定义. 1:定义了实现Runnable接口 2:重写Runnable接口中的run方法,就是将线程运行的代码放入在run方法中 3:通过Thread类建立线

Java 多线程详解(三)------线程的同步

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html 介绍完如何创建进程以及线程了,那么我们接着来看一个实例: 利用多线程模拟 3 个窗口卖票 第一种方法:继承 Thread 类 创建窗口类 TicketSell package com.ys.thread; p

线程问题——同步和死锁

[问题引出]:比如说对于买票系统,有下面的代码: 1 class hello implements Runnable { 2 private static int count=5; 3 public void run() { 4 for(int i=0;i<10;++i){ 5 if(count>0){ 6 try{ 7 Thread.sleep(1000); 8 }catch(InterruptedException e){ 9 e.printStackTrace(); 10 } 11 Sy

30分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程.线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界.是

Java中线程的同步问题

在生活中我们时常会遇到同步的问题,而且大多数的实际问题都是线程的同步问题 我这里以生活中的火车售票来进行举例: 假设现在我们总共有1000张票要进行出售,共有10个出售点,那么当售票到最后只有一张票时,每个售票点如何去处理这唯一的一张票?或者对于某一张票而言,假设它正在售票站1售票的程序执行过程中,但是还没有出售,那么此时,其他售票站改如何去处理这张票呢? 这时,应该考虑使用java中的同步机制: 方法一:使用Runnable接口实现 package thread; public class T

Java 多线程(二)—— 线程的同步

 上文创建多线程买票的例子中注释会出现错票.重票的问题,本文来讲讲如何解决此问题.本文例子:利用多线程模拟 3 个窗口卖票 实现Runnable接口 public class TestThread2 { public static void main(String [] args){ Window window=new Window(); Thread thread1=new Thread(window,"窗口一"); Thread thread2=new Thread(window,

java线程的同步

问题的引出 在java语言中,我们常常会用到多线程相关的操作,但是多线程操作中可能会出现一些问题. 现在给定一个抢票的多线程代码 class MyThread implements Runnable{ int a = 10;//票数 @Override public void run() { while(true) { if(a>0) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(