线程的应用之车票

来源:互联网 发布:apk源码编译软件 编辑:程序博客网 时间:2024/04/30 00:32
class Xc1 implements Runnable{
public static int tickets=100;
static String aa=new String("1");//字符串随意定义,定义在函数上边
/*通过类创建了两个线程,这样在new 对象的时候就会创建了两个synchronized(aa)
* 中的aa对象,所以要用static将aa设置成常量
* synchronized的作用是,让它所管辖的代码块,
*  要么全部执行完,要么全部不执行
*/
public void run(){
//synchronized 修饰函数不需要字符串,相当于默认是this
while(true){
synchronized (aa){
//即可以修饰代码块,又可以修饰函数
if(tickets>0){
System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
--tickets;
}else{
break;
}
}

}
}
public class java6_6 {
public static void main(String[]rags){
Xc1 xc=new Xc1();
Thread bb=new Thread(xc);
bb.setName("西安南站");
bb.start();


Xc1 xc1=new Xc1();
Thread cc=new Thread(xc1);
cc.setName("西安北站");
cc.start();


Xc1 xc2=new Xc1();
Thread dd=new Thread(xc2);
dd.setName("西安东站");
dd.start();
}

}


class Xc2 extends Thread{
public static int tickets=100;
static String aa=new String("1");
public void run(){
while(true){
synchronized(aa){
if(tickets>0){
//System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
System.out.println(Xc2.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
--tickets;
}else{
break;
}
}
}
}
}
public class java6_8 {
public static void main(String[]rags){
Xc2 xc1=new Xc2();
xc1.setName("西安南站");
xc1.start();
/*Thread bb=new Thread(xc1);
bb.setName("西安南站");
bb.start();
*/
Xc2 xc2=new Xc2();
xc2.setName("西安北站");
xc2.start();
/*Thread cc=new Thread(xc2);
cc.setName("西安北站");
cc.start();
*/
Xc2 xc3=new Xc2();
xc3.setName("西安东站");
xc3.start();
/*Thread dd=new Thread(xc3);
dd.setName("西安东站");
dd.start();
*/
}
}

class Xc2 extends Thread{public static int tickets=100;static String aa=new String("1");public void run(){while(true){synchronized(aa){//两个线程的aa是自己的,并不是公共的if(tickets>0){//System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");System.out.println(Xc2.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");--tickets;}else{break;}}}}}public class java6_8 {public static void main(String[]rags){Xc2 xc1=new Xc2();xc1.setName("西安南站");xc1.start();/*Thread bb=new Thread(xc1);bb.setName("西安南站");bb.start();*/Xc2 xc2=new Xc2();xc2.setName("西安北站");xc2.start();/*Thread cc=new Thread(xc2);cc.setName("西安北站");cc.start();*/Xc2 xc3=new Xc2();xc3.setName("西安东站");xc3.start();/*Thread dd=new Thread(xc3);dd.setName("西安东站");dd.start();*/}}
class Xc1 implements Runnable{public static int tickets=100; static String aa=new String("1");//字符串随意定义,定义在函数上边/*通过类创建了两个线程,这样在new 对象的时候就会创建了两个synchronized(aa) * 中的aa对象,所以要用static将aa设置成常量 * synchronized的作用是,让它所管辖的代码块, *  要么全部执行完,要么全部不执行*/public void run(){//synchronized 修饰函数不需要字符串,相当于默认是thiswhile(true){synchronized (aa){//即可以修饰代码块,又可以修饰函数if(tickets>0){System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");--tickets;}else{break;}}} }}public class java6_6 {public static void main(String[]rags){Xc1 xc=new Xc1();Thread bb=new Thread(xc);bb.setName("西安南站");bb.start();Xc1 xc1=new Xc1();Thread cc=new Thread(xc1);cc.setName("西安北站");cc.start();Xc1 xc2=new Xc1();Thread dd=new Thread(xc2);dd.setName("西安东站");dd.start();}}



0 0
原创粉丝点击