A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币

如何 设定个flag 标记,让卖完票后停止下来呢?学习过flag标记 但是 不知道怎么运用,调用 请各位帮我看看

最佳答案

查看完整内容

哈哈 你也学到java基础第11天吧 被毕老师坑了撒 while(true)就是死循环 开4个线程 准备关JVM吧 你应该发现票买完了循环还在继续!!改成while(tick>0)吧

6 个回复

倒序浏览
哈哈  你也学到java基础第11天吧 被毕老师坑了撒   while(true)就是死循环  开4个线程 准备关JVM吧  你应该发现票买完了循环还在继续!!改成while(tick>0)吧

评分

参与人数 1黑马币 +2 收起 理由
谢永烽 + 2 真棒,感谢给我下图的程序分享.

查看全部评分

回复 使用道具 举报
/*
简单的卖票小程序;

*/

class Ticket implements Runnable
{
         
        private int tick = 100;
        //Object obj = new Object(); //创建个上帝对象
        public void run()
        {
                while(true) /*同步解决安全问题,对多条操作共享数据的语句,只能让一个线程都执行完。在执行中,其他线程不能参与 执行。*/
                {
                        synchronized(this) //可以是任意对象 也可以把obj 传到里面 ,静态函数的同步方式 传入的对象必须是字节码文件对象,类名.class
                        {       
                                if (tick>0)
                                {
                                        //显示线程名及余票数
                                        try{Thread.sleep(10);}catch(Exception e){} //让当前执行的线程睡一会,这样测试安全
                                        System.out.println(Thread.currentThread().getName()+"...maile:"+tick--);
                                         
                                }       
                        }
                }
               
        }

}

class TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t = new Ticket();//创建Runnable接口子类的实例对象  
                 //有多个窗口在同时卖票,这里用四个线程表示
                 Thread t1 = new Thread(t);//创建了一个线程,把t作为实际参数传给thread类的构造方法
                 Thread t2 = new Thread(t); //将Runnble接口的子类对象作为实参传递给Thread类的构造方法。
                 Thread t3 = new Thread(t);
                 Thread t4 = new Thread(t);       
                t1.start(); //启动线程
                t2.start();
                t3.start();
                t4.start();
        }
}
回复 使用道具 举报
没人啊~
回复 使用道具 举报
public class RunnableDemo {
         public static void main(String [] args ) {
                Mythread2 t2=new Mythread2 ();
                Thread thread2=new Thread (t2);
                thread2 .setName( "线程二" );
                thread2 .start() ;
                 for (int i = 0; i < 10; i++) {
                         if (i== 5) {
                                t2 .setflag( false);//将中断标记设为false
                         }
                        System .out. println(Thread .currentThread() .getName() +"--->"+ i);
                         try {
                                Thread .sleep( 500);
                         } catch (InterruptedException e) {
                                e .printStackTrace() ;
                         }
                 }
               
         }
         //静态内部类相当于外部类,只有内部类可以被静态和私有修饰
         static class Mythread2 implements Runnable {
                 //中断线程时只能由线程自身中断自身,而不能由其他的线程来直接中断
                 private boolean flag= true;//设置中断标记
                 public void setflag( boolean f ){//外部方法可以通过调用此方法来设置中断标记
                         flag=f ;
                 }
                 public void run() {
                         int i =0;
                         while(flag && i <10) {//自身中断
                                System .out. println(Thread .currentThread() .getName() +"--->"+ i);
                                i ++;
                                 try {
                                        Thread .sleep( 500);
                                 } catch (InterruptedException e) {
                                        e .printStackTrace() ;
                                 }
                         }
                 }
         }
}
具体代码实现2:
public class JiShiQi {
         public static void main(String [] args ) {
                Runner3 thread3=new Runner3 ();
                Thread t=new Thread (thread3) ;
                t .start() ;
                 try {
                        Thread .sleep( 10000);
                 } catch (InterruptedException e) {
                 }
                thread3 .flag= false;
         }
}

class Runner3 implements Runnable {
         public boolean flag= true;
         public void run() {
                 while(flag ){
                         try {
                                Thread .sleep( 1000);
                                System .out. println("-----------" +new Date()+ "---------------------");
                         } catch (InterruptedException e) {
                                 return ;
                         }
                 }      
         }
}
回复 使用道具 举报
outsider1020 发表于 2014-12-23 11:43
public class RunnableDemo {
         public static void main(String [] args ) {
                Myth ...

感谢分享!能留个联系方式吗,愿能和你交流
回复 使用道具 举报
小徐_y8nUx 来自手机 中级黑马 2014-12-24 08:50:49
7#
学习了!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马