模拟以下场景。
A线程不断生成id(通过调用UUID.randomUUID().toString())放入阻塞队列。
B线程从队列中取出id,并计算其md5值。并将id,md5(id) 写入文件。
如:A线程生成7835d426-333a-4798-98ce-2b16b5fad614
B线程获取7835d426-333a-4798-98ce-2b16b5fad614,并计算其md5值为
0c90900c89c4ae64e0cef561fe88efe1
然后7835d426-333a-4798-98ce-2b16b5fad614,0c90900c89c4ae64e0cef561fe88efe1
作为一行写入文件中。
Producer.java import java.util.UUID; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class Producer implements Runnable{ private BlockingQueue<String> queue; public Producer(ArrayBlockingQueue<String> strings) { this.queue=strings; } @Override public void run() { while (true){ try { queue.put(UUID.randomUUID().toString()); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Consumer.java
import java.io.*; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class Consumer implements Runnable { private BlockingQueue<String> queue; public Consumer(ArrayBlockingQueue<String> strings) { this.queue=strings; } @Override public void run() { while (true) { try { BufferedWriter writer = new BufferedWriter(new FileWriter("d:\\\\test\\\\MD5.txt", true)); String id = queue.take(); String md5 = StringToMd5(id); System.out.println(id+","+md5); writer.write(id); writer.write(", "); writer.write(md5); writer.write("\r\n"); writer.close(); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } private static String StringToMd5(String id) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(id.getBytes("UTF-8")); byte[] bytes = md5.digest(); StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { if (Integer.toHexString(0xff & bytes[i]).length() == 1) { stringBuffer.append("0").append(Integer.toHexString(0xff & bytes[i])); }else { stringBuffer.append(Integer.toHexString(0xff & bytes[i])); } } return stringBuffer.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return ""; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return ""; } } }
HomeWork2.java
import java.util.concurrent.ArrayBlockingQueue; public class HomeWork2 { public static void main(String[] args) { ArrayBlockingQueue<String> strings = new ArrayBlockingQueue<String>(10); new Thread(new Producer(strings)).start(); new Thread(new Consumer(strings)).start(); } }