黑马程序员技术交流社区

标题: 线程求解! [打印本页]

作者: 罗磊    时间: 2012-8-22 11:54
标题: 线程求解!
public class ThreadTests {
        
        public static void main(String[] args) {
                StringBuilders sb = new StringBuilders();
                new Thread(new Tisk1(sb), "存").start();;
                new Thread(new Tisk2(sb), "取").start();

        }
}
class StringBuilders{
        StringBuilder sb = new StringBuilder();
        Boolean flog = false;
        public void add(){
                while(flog){
                        synchronized (sb) {
                                for (int x = 0; x < 10; x++) {//向缓冲区中添加东西
                                        sb.append(x+",");
                                }
                                flog = true;
                        }
                        
                }
               
        }
        public void get(){

                while (!flog) {
                        synchronized (sb) {
                                System.out.println(sb.toString());//从缓冲区中取东西
                                flog = false;
                        }
                }
        }
}
class Tisk1 implements Runnable{//实现添加操作
        private StringBuilders sb;
        Tisk1(StringBuilders sb){
                this.sb = sb;
        }
        
        public void run(){
                        sb.add();
               
        }
}
class Tisk2 implements Runnable{//实现读取操作
        private StringBuilders sb;
        Tisk2(StringBuilders sb){
                this.sb = sb;
        }
        
        public void run(){
                        sb.get();
        }
}
Eclipse下为何输出结果一片空白,求解!
作者: 李知伦    时间: 2012-8-22 13:04
同步代码块,不需要再用旗标来控制多线程轮换

一直输出空白是因为add的时候先判断flag,默认为false,就加不进去
get的时候,!flag默认为ture,所以就不停的输出sb的初值,当然就是空字符串了

解决办法:while(flag/!flag)都改成whie(true)
作者: 罗磊    时间: 2012-8-22 17:24
诶咿呀,太粗心啦,我自己检查好几遍都没发现,多谢,解决啦




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