java 中多线程中的四个窗口卖100张票问题 我的答案是
publicclassTest34{publicstaticvoidmain(String[]args){newTickesSellers().start();newTi...
public class Test34 {
public static void main(String[] args) {
new TickesSellers().start();
new TickesSellers().start();
new TickesSellers().start();
new TickesSellers().start();
}
// TODO Auto-generated method stub
}
我给的答案是:
class TickesSellers extends Thread {
private static int num = 1000;
Object obj = new Object();
public void run() {
while (num > 0) {
synchronized (obj) {
System.out.println(getName() + "这是第" + num-- + "张票");
}
}
}
}
不理解为什么答案都是 while(ture) if(){break;}{}这种结构 有必要吗? 为什么?
package cn.itcast.thread;
public class Demo12_Tickets {
/**
* @param args
*/
public static void main(String[] args) {
/*TicketSeller ts1 = new TicketSeller();
TicketSeller ts2 = new TicketSeller();
TicketSeller ts3 = new TicketSeller();
TicketSeller ts4 = new TicketSeller();
ts1.start();
ts2.start();
ts3.start();
ts4.start();
*/
new TicketSeller().start();
new TicketSeller().start();
new TicketSeller().start();
new TicketSeller().start();
}
}
/*
* 有一百张火车票,要求是用四个窗口同时卖票,模拟这个操作
*/
class TicketSeller extends Thread { //定义卖票窗口继承线程类
private static int tickets = 100; //定义票
private static Object obj = new Object();
public void run() { //重写run方法将卖票的操作写在run方法中
while(true) {
synchronized(obj) {
if(tickets <= 0){
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + ": 这是第" + tickets-- + "号票");//1234
//tickets--;
}
}
}
} 展开
public static void main(String[] args) {
new TickesSellers().start();
new TickesSellers().start();
new TickesSellers().start();
new TickesSellers().start();
}
// TODO Auto-generated method stub
}
我给的答案是:
class TickesSellers extends Thread {
private static int num = 1000;
Object obj = new Object();
public void run() {
while (num > 0) {
synchronized (obj) {
System.out.println(getName() + "这是第" + num-- + "张票");
}
}
}
}
不理解为什么答案都是 while(ture) if(){break;}{}这种结构 有必要吗? 为什么?
package cn.itcast.thread;
public class Demo12_Tickets {
/**
* @param args
*/
public static void main(String[] args) {
/*TicketSeller ts1 = new TicketSeller();
TicketSeller ts2 = new TicketSeller();
TicketSeller ts3 = new TicketSeller();
TicketSeller ts4 = new TicketSeller();
ts1.start();
ts2.start();
ts3.start();
ts4.start();
*/
new TicketSeller().start();
new TicketSeller().start();
new TicketSeller().start();
new TicketSeller().start();
}
}
/*
* 有一百张火车票,要求是用四个窗口同时卖票,模拟这个操作
*/
class TicketSeller extends Thread { //定义卖票窗口继承线程类
private static int tickets = 100; //定义票
private static Object obj = new Object();
public void run() { //重写run方法将卖票的操作写在run方法中
while(true) {
synchronized(obj) {
if(tickets <= 0){
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + ": 这是第" + tickets-- + "号票");//1234
//tickets--;
}
}
}
} 展开
3个回答
展开全部
有 多线程可能大家同时发现有票 但是只有1个能进行操作
如果在前面的操作结束后 后面的操作不进行判断 很可能形成票已经不够了 但是你还是操作了
所以要再做一次判断
还有private static Object obj = new Object();有写麻烦
你直接synchronized(this.getClass())也可以
如果在前面的操作结束后 后面的操作不进行判断 很可能形成票已经不够了 但是你还是操作了
所以要再做一次判断
还有private static Object obj = new Object();有写麻烦
你直接synchronized(this.getClass())也可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
票有卖完的时候,票都卖完了,还有必要继续循环吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询