public class Xiti { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个窗口
TicketWindow tw1=new TicketWindow();
//TicketWindow tw2=new TicketWindow();
//TicketWindow tw3=new TicketWindow();
//使用三个线程同时启动
Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);
t1.start();
t2.start();
t3.start();
}}
//售票窗口类
class TicketWindow implements Runnable
{
//一共两千张
private int nums=2000; @Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
//认为if else 要保证其原子性[同步代码块]
synchronized(this)
{
if(nums>0)
{
//Thread.currentThread().getName() 表示当前线程的名字
System.out.println
(Thread.currentThread().getName()+"现在售出第"+nums+"张票");
//休眠时间
try{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
nums--;
}else{
break;
}
}
}
}
}
Thread-0现在售出第2000张票
Thread-0现在售出第1999张票
Thread-2现在售出第1998张票
Thread-2现在售出第1997张票
Thread-2现在售出第1996张票
Thread-2现在售出第1995张票
以上是测试结果
我想的结果应该是
Thread-0现在售出第2000张票
Thread-1现在售出第1999张票
Thread-2现在售出第1998张票
Thread-0现在售出第1997张票
Thread-1现在售出第1996张票
Thread-2现在售出第1995张票
无限循环
求帮忙
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个窗口
TicketWindow tw1=new TicketWindow();
//TicketWindow tw2=new TicketWindow();
//TicketWindow tw3=new TicketWindow();
//使用三个线程同时启动
Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);
t1.start();
t2.start();
t3.start();
}}
//售票窗口类
class TicketWindow implements Runnable
{
//一共两千张
private int nums=2000; @Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
//认为if else 要保证其原子性[同步代码块]
synchronized(this)
{
if(nums>0)
{
//Thread.currentThread().getName() 表示当前线程的名字
System.out.println
(Thread.currentThread().getName()+"现在售出第"+nums+"张票");
//休眠时间
try{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
nums--;
}else{
break;
}
}
}
}
}
Thread-0现在售出第2000张票
Thread-0现在售出第1999张票
Thread-2现在售出第1998张票
Thread-2现在售出第1997张票
Thread-2现在售出第1996张票
Thread-2现在售出第1995张票
以上是测试结果
我想的结果应该是
Thread-0现在售出第2000张票
Thread-1现在售出第1999张票
Thread-2现在售出第1998张票
Thread-0现在售出第1997张票
Thread-1现在售出第1996张票
Thread-2现在售出第1995张票
无限循环
求帮忙
import java.util.List;public class ProcessCall { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 创建一个窗口
// TicketWindow tw2=new TicketWindow();
// TicketWindow tw3=new TicketWindow();
// 使用三个线程同时启动
Thread t1 = new TicketWindow();
Thread t2 = new TicketWindow();
Thread t3 = new TicketWindow();
t1.setPriority(4);
t2.setPriority(3);
t3.setPriority(2);
TicketWindow.joinGroup(t1);
TicketWindow.joinGroup(t2);
TicketWindow.joinGroup(t3);
t1.start();
t2.start();
t3.start();
}}// 售票窗口类
class TicketWindow extends Thread{
// 一共两千张
static List<Thread> list = null;
public TicketWindow(){
list = new ArrayList<Thread>();
}
public static void joinGroup(Thread t){
list.add(t);
}
private int nums = 2000; @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
// 认为if else 要保证其原子性[同步代码块]
synchronized (this) {
if (nums > 0) {
// Thread.currentThread().getName() 表示当前线程的名字
System.out.println(Thread.currentThread().getName()
+ "现在售出第" + nums + "张票");
// 休眠时间
try {
Thread.sleep(2000);
for(Thread t:list){
if(t!=this){
t.setPriority((t.getPriority()+1));
}
else{
this.setPriority(this.getPriority()-list.size()+1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
nums--;
} else {
break;
}
}
} }
}