黑马程序员技术交流社区
标题:
关于多线程
[打印本页]
作者:
zl78365336
时间:
2013-12-7 23:42
标题:
关于多线程
本帖最后由 zl78365336 于 2013-12-8 17:17 编辑
售票的代码,出了什么问题,怎样完善代码?
import java.util.concurrent.Executors;
public class TicketTest {
public static void main(String[] args) {
Ticket ticket = Ticket.getInstance();
ticket.setNumber(100);
new SealWindow("1号窗口").start();
new SealWindow("2号窗口").start();
new SealWindow("3号窗口").start();
new SealWindow("4号窗口").start();
}
}
class Ticket {
private static Ticket ticket = new Ticket();
private Ticket() { }
public static Ticket getInstance() {
return ticket;
}
private int number;
public boolean isHasTicket() {
if (number > 0)
return true;
return false;
}
public void sealTicket() {
number--;
}
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
}
class SealWindow {
private String name;
public SealWindow(String name) {
this.name = name;
}
public void start() {
Executors.newScheduledThreadPool(1).execute(new Runnable() {
Ticket ticket = Ticket.getInstance();
@Override
public void run() {
while (ticket.isHasTicket()) {
synchronized (Ticket.class) {
if(!ticket.isHasTicket())continue;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
ticket.sealTicket();
System.out.println(name + "售出" + (ticket.getNumber() + 1) + "号票");
}
}
}
});
}
}
class TicketSealCenter { }
复制代码
作者:
橸瑩膤漃寞林
时间:
2013-12-8 15:39
你这个运行起来没有问题,1到100号票都打印了,4个窗口都运行了,也没有出现0号票的情况
作者:
zl78365336
时间:
2013-12-8 15:47
橸瑩膤漃寞林 发表于 2013-12-8 15:39
你这个运行起来没有问题,1到100号票都打印了,4个窗口都运行了,也没有出现0号票的情况 ...
程序停不了,你再看看
作者:
肖川
时间:
2013-12-8 16:03
你这个哪里是多线程的代码啊。怎么没有看出来。实现多线程的两种方法:
创建线程的第一种方式:继承Thread类。
步骤:
定义类继承Thread。
复写Thread类中的run方法。:将自定义代码存储在run方法。让线程运行。
调用线程的start方法,该方法两个作用:启动线程,调用run方法。
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。为什么要将Runnable接口的子类对象传递给Thread的构造函数。因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
你再仔细看看自己的代码,然后重新写,看看会不会对。{:soso_e100:}
作者:
wangchao1686
时间:
2013-12-8 16:12
这不是多线程吧,建议再看看毕老师的视频。做好终结。
作者:
何丛
时间:
2013-12-8 17:26
线程池没有关闭,最后应该调用shutDown方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2