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 修饰函数不需要字符串,相当于默认是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();
}
}