黑马程序员技术交流社区

标题: 如何控制线程的结束? [打印本页]

作者: 王洪波    时间: 2013-5-7 23:49
标题: 如何控制线程的结束?
本帖最后由 王洪波 于 2013-5-10 09:21 编辑

线程中的代码若有循环语句,设置循环条件为false。可使线程安全线束。但在当线程执行循环体语句时,有异常,或者被阻塞,这种情况下又如何控制线程安全的结束呢?
作者: 黑马-雷钊    时间: 2013-5-8 01:29
你好,线程我今天才学。但我知道你说的情况。我发一段我今天学的代码你看看 。主要是注释。我感觉只要理解了线程是如何运作的还是比较简单的。
class SynchronizedDemo {
        public static void main(String[] args){
                Runnable1 r = new Runnable1 ();//创建资源类,只有一个火车站所以只要一个
                Thread t1 = new Thread(r);//创建线程对象,并把资源传给它
                Thread t2 = new Thread(r);//一共需要4个窗口所以创建4个线程对象
                Thread t3 = new Thread(r);
                Thread t4 = new Thread(r);
                t1.start();//分别开始启动线程
                t1.setName("一");//调用setName()方法,分别给线程的取名字
                t2.start();
                t2.setName("二");
                t3.start();
                t3.setName("三");
                t4.start();
                t4.setName("四");
        }
}

class Runnable1 implements Runnable {
        int p = 100 ;
        public void run () {
                while (true){
                        synchronized(this) {//创建一个锁。随意传个对象进区都可以。这样锁的代码块里就只有一个线程能进去了。防止了安全隐患。还同步了
                                if (p > 0){
                                        try{
                                                Thread.sleep(100);
                                        }
                                        catch (Exception e){
                                        }
                                        System.out.println(Thread.currentThread().getName()+"号窗卖了"+p--);//调用thread类里面的currentThread()方法,返回是哪个线程在执行,最后.getName返回正在执行线程的名字属性
                                }else{
                                        break;//跳出循环,要不会一直循环的。
                                }
                        }
                       
                       
                }
        }
}

这是火车站售票的代码。你根据注释看看。应该对你会有一点点的帮助的。还是不清楚的话可以回复我
作者: 黑马-雷钊    时间: 2013-5-8 01:30
还有就是循环不能定义在线程锁里面,否则那个锁会让一个线程一直执行的。那样其它线程就进不去了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2