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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王洪波 中级黑马   /  2013-5-7 23:49  /  1108 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王洪波 于 2013-5-10 09:21 编辑

线程中的代码若有循环语句,设置循环条件为false。可使线程安全线束。但在当线程执行循环体语句时,有异常,或者被阻塞,这种情况下又如何控制线程安全的结束呢?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
你好,线程我今天才学。但我知道你说的情况。我发一段我今天学的代码你看看 。主要是注释。我感觉只要理解了线程是如何运作的还是比较简单的。
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;//跳出循环,要不会一直循环的。
                                }
                        }
                       
                       
                }
        }
}

这是火车站售票的代码。你根据注释看看。应该对你会有一点点的帮助的。还是不清楚的话可以回复我

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
还有就是循环不能定义在线程锁里面,否则那个锁会让一个线程一直执行的。那样其它线程就进不去了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马