经典案例那个什么多线程--卖票..........................就是好像有点不对~~!先写下来.有大哥哥,大姐姐帮看下吗

package javawork;

public class RunnableDemo2 {

public static void main(String[] args) {
Runnable02 ru = new Runnable02();
Thread ru1 = new Thread(ru);
Thread ru2 = new Thread(ru);// 两个窗口
ru1.start();// 两个窗口启动
ru2.start();
}

}

class Runnable02 implements Runnable {
private int num = 16;
Object obj = new Object();
String s = new String();
boolean flag = false;

@Override
public void run() {
while (true) {
// 同步代码块
// flag为 false时 执行同步代码块
if (!flag) {
synchronized (this) {// 同步代码快的函数可以是任意函数
if (num > 0) {
System.out.println(Thread.currentThread().getName() + ":" + (num--) + "号票" + "同步代码块++++");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 睡眠0.2S
}
flag = true;
}
// 同步函数
} else {
funtion();
flag = false;
}

}
}

// 同步函数的锁是This
public synchronized void funtion() {
if (num > 0) {
System.out.println(Thread.currentThread().getName() + ":" + (num--) + "号票" + "同步函数----");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 睡眠0.2S
}
}
}

原文地址:https://www.cnblogs.com/peng1314/p/10029807.html

时间: 2024-07-30 04:50:03

经典案例那个什么多线程--卖票..........................就是好像有点不对~~!先写下来.有大哥哥,大姐姐帮看下吗的相关文章

多线程卖票代码

package com.loaderman.syn; public class Demo_Ticket { /** * 需求:铁路售票,一共100张,通过四个窗口卖完. */ public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start(); } } class Ticket extends Thread {

Java多线程卖票例子

1 package com.test; 2 3 public class SaleTickets implements Runnable 4 { 5 private int ticketCount = 10;// 总的票数 6 Object mutex = new Object();// 锁 7 8 /** 9 * 卖票 10 */ 11 public void sellTicket() 12 { 13 synchronized (mutex)// 当操作的是共享数据时, 14 // 用同步代码

对于JAVA多线程卖票小程序的理解

昨天把多线程重新看了一遍,发现自己还是有许多需要理解的地方,现在写一篇总结. 一:利用继承Thread类会出现的问题: public class SellTicketsThread extends Thread { private int tickets = 10; public SellTicketsThread(String name) { super(name); } @Override public void run() { while (true) { if(tickets<=0) b

老生常谈之多线程卖票问题

代码系本人逐字逐句编写所得,转载请注明出处,谢谢合作! 多线程售票的问题算是老生常谈了,笔者是Java初学者,曾为弄清楚这个问题在度娘里搜过好多篇关于这个问题的代码,发现正确的代码还是很有限.粘贴复制的现象很严重,而且大多数代码问题主要是在打印车票超过数量的问题上(部分会打印出负数票号),还有个别会出现表面看似打印结果正确,但其实程序中还有线程在等待执行(在Eclipse的控制台看到明显的"红点"一直在亮着).以下是笔者自己写的关于这个问题的代码,由于个人水平有限,难免有所疏漏,希望大

多线程—卖票

import threadingimport timelist_ticket=[] #定义票池lock=threading.Lock() #获得多线程锁num=30#票数for i in range(1,num+1): #ticket_num="0"*(len(str(num))-len(str(i)))+str(i) #001,003,013 ticket_num=str(i).zfill(3) list_ticket.append(ticket_num)# print(list_t

多线程系列1:经典卖票

1.卖票的方法 class TicketRest { int ticket = 1; int Max = 0; public TicketRest(int max) { Max = max; } /// <summary> /// 未加锁 /// </summary> /// <param name="num"></param> public void SellTicketNoLock(int num) { while (ticket &

多线程之多窗口卖票&amp;线程之间的通信

案例一:使用多线程完成三个窗口卖票(不能出现重复卖票以及负数票) 卖票程序SellTicket 这里使用Lock类中的方法实现加锁和释放锁! package cn.itcast.thread2; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellTicket implements Runnable { private int ticke

多线程十大经典案例之一 双线程读写队列数据

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8646902 欢迎关注微博:http://weibo.com/MoreWindows 在<秒杀多线程系列>的前十五篇中介绍多线程的相关概念,多线程同步互斥问题<秒杀多线程第四篇一个经典的多线程同步问题>及解决多线程同步互斥的常用方法

java多线程经典案例

/** * 典型案例:子线程执行10次,主线程执行100次,两者交替50次. */ package cn.itcast.lesson4; public class TestWaitNotify { public static void main(String[] args){ final Business business= new Business(); new Thread( new Runnable() { public void run() { for(int i=1;i<=50;i++