第六周 技术博客
非常不好意思上周的技术博客真的是排版各种乱,我今天才知道有插入代码的方式
我在下面试试直接插入代码
其实看完之后可以发现最后一行没有输出,这就是守护线程还没有执行完就结束了,我在找解决方案,或许可以在另一个线程里用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) 编辑 收藏 举报