黑马程序员技术交流社区
标题:
多线程好难啊
[打印本页]
作者:
奔来的黑马
时间:
2015-1-6 21:37
标题:
多线程好难啊
多线程中,多消费者,多生产者好麻烦啊 。。 求师兄师姐给发几个有代表性的代码。。
作者:
银离子
时间:
2015-1-6 21:47
售票的代码,参考下吧。
public class Test7 {
public static void main(String[] args) {
Ticket tk = new Ticket();//建立票信息对象
TicketSealCenter tsc = new TicketSealCenter(tk);// 创建售票中心。
tsc.set(200);//售票中心分配一定数量的票
new Thread(new SealWindow(tk,"一号窗口")).start();// 创建、启动线程,开始卖票。
new Thread(new SealWindow(tk,"二号窗口")).start();
new Thread(new SealWindow(tk,"三号窗口")).start();
new Thread(new SealWindow(tk,"四号窗口")).start();
}
}
class Ticket//票信息类
{
private int ticket;//票数
public int getTicket()//获取票数
{
return ticket;
}
public void setTicket(int ticket)//设置票数。
{
this.ticket = ticket;
}
}
class TicketSealCenter// 售票中心类
{
private Ticket tk;
public TicketSealCenter(Ticket tk)//一初始化就有票信息。
{
this.tk = tk;
}
public void set(int t)//分配一定数量的票
{
tk.setTicket(t);
}
}
class SealWindow implements Runnable // 售票窗口类
{
private Ticket tk;
private String name;
public SealWindow(Ticket tk,String name)// 一初始化就有票信息和窗口名字。
{
this.tk = tk;
this.name = name;
}
public void run()// 里面是多线程执行的卖票代码。
{
while(true)//循环卖票
{
synchronized(tk)//同步代码块,保证多线程的安全性。
{
int t = tk.getTicket();//获取票数
if(t>0)//判断是否还有票。
{
System.out.println(name+": 第"+(t--)+"张票已卖出");
tk.setTicket(t);// 设置余票信息。
}
else
{
System.out.println(name+": 票已售完");//票数为0.
break;// 退出循环。
}
}
}
}
}
复制代码
作者:
西西小枫
时间:
2015-1-6 22:43
多看看毕老师的视频。
作者:
任我行_2014
时间:
2015-1-6 23:19
我在基础班,马上也要学到多线程啦,这一部分很重要,看来要下一番功夫
作者:
liuhuan
时间:
2015-1-7 08:51
楼主加油哦。。
作者:
446111220
时间:
2015-1-7 09:20
多线程确实很难得
作者:
Joseph_liuxh
时间:
2015-1-7 10:39
强烈建议再看毕老师的视频,一次不行再看一次。、
加油
作者:
bin393973282
时间:
2015-1-7 10:55
多次反复的看视频,再多敲几遍代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2