第六周 技术博客

 

 

非常不好意思上周的技术博客真的是排版各种乱,我今天才知道有插入代码的方式

 

我在下面试试直接插入代码

 

其实看完之后可以发现最后一行没有输出,这就是守护线程还没有执行完就结束了,我在找解决方案,或许可以在另一个线程里用interrupt结束而不是用守护线程的方式

  1 /*
  2 题目:输入十个数,如果输入的和之前输入的一样就不输入
  3         (我用了多线程锻炼一下自己的编程能力)
  4         一个线程输入,另一个线程直接运算并且输出,之前的线程就可以直接再输入,不用等待输出结束
  5 
  6 */
  7 import java.util.ArrayList;
  8 import java.util.Scanner;
  9 import java.util.concurrent.locks.*;
 10 
 11 class Sort
 12 {
 13     Lock lock = new ReentrantLock();
 14     Condition con_in = lock.newCondition();
 15     Condition con_sr = lock.newCondition();
 16     
 17     private boolean flag=false;            //判断标记
 18 
 19     ArrayList<Integer> list;
 20 
 21     public Sort(ArrayList<Integer> list)        
 22     {
 23         this.list= list;
 24     }
 25 
 26     Scanner input = new Scanner(System.in);
 27 
 28     public void sortArray() throws InterruptedException  //线程t1执行的对数组列表进行判断
 29     {
 30         lock.lock();
 31         try
 32         {
 33             while(!flag)
 34                 con_sr.await();
 35 
 36             for (int i=0;i<list.size()-1 ;i++ )
 37             {
 38                 for (int j=i+1;j<list.size() ;j++ )
 39                 {
 40                     if(list.get(i)==list.get(j))
 41                         list.remove(j);
 42                 }
 43             }
 44             System.out.print("current array is: ..");
 45             for(int k = 0;k<list.size();k++)
 46                 System.out.print(list.get(k)+" ");
 47             System.out.println();
 48 
 49             flag=false;
 50             con_in.signal();
 51         }
 52         finally
 53         {
 54             lock.unlock();
 55         }
 56 
 57 
 58 
 59         
 60     
 61         
 62     }
 63 
 64     public void inputArray() throws InterruptedException    //输入值
 65         
 66     {    
 67         lock.lock();
 68         try
 69         {
 70             while(flag)
 71                 con_in.await();
 72             Integer temp = input.nextInt();
 73             list.add(temp);
 74             flag=true;
 75             con_sr.signal();
 76         }
 77         finally
 78         {
 79             lock.unlock();
 80         }
 81         
 82     }
 83 }
 84 
 85 class In implements Runnable        //线程2的run方法封装
 86 {
 87     Sort s;
 88     In(Sort s)
 89     {
 90         this.s= s;
 91     }
 92 
 93     public void run()
 94     {
 95         for (int i = 0; i <10 ;i++ )
 96         {
 97             try
 98             {
 99                 s.inputArray();
100             }
101             catch (InterruptedException e)
102             {
103             }
104             
105         }
106 
107     }
108 }
109 
110 class Sr implements Runnable        //线程1的run方法封装
111 {
112     Sort s;
113     Sr(Sort s)
114     {
115         this.s=s;
116     }
117     public void run()
118     {
119         while (true)
120             try
121             {
122                 s.sortArray();
123             }
124             catch (InterruptedException e)
125             {
126             }
127     }
128 }
129 
130 
131 
132 
133 
134 class SortDemo
135 {
136 
137 
138     @SuppressWarnings("unchecked")public static void main(String[] args) 
139     {
140         
141 
142         ArrayList<Integer> list = new ArrayList();
143         Sort s = new Sort(list);
144 
145         Thread t1= new Thread(new Sr(s));
146         Thread t2= new Thread(new In(s));
147         t1.setDaemon(true);                        //输出线程设置成守护线程
148 
149          t1.start();
150          t2.start();
151 
152     }
153 }

posted on 2016-04-04 08:35  fanfans1996  阅读(122)  评论(0编辑  收藏  举报