java jdk多线程新特性2
来源:互联网 发布:mac导入的照片在哪里 编辑:程序博客网 时间:2024/05/01 22:56
package heima;
import java.util.concurrent.Semaphore;
import java.util.concurrent.SynchronousQueue;
/*
* 第二题:现成程序中的Test类中的代码在不断地产生数据
* ,然后交给TestDo.doSome()方法去处理,
* 就好像生产者在不断地产生数据,消费者在不断消费数据
* 。请将程序改造成有10个线程来消费生成者产生的数据,
* 这些消费者都调用TestDo.doSome()方法去进行处理,故每个
* 消费者都需要一秒才能处理完,程序应保证这些消费者线程依次有
* 序地消费数据,只有上一个消费者消费完后,下一个消费者才能消费数
* 据,下一个消费者是谁都可以,但要保证这些消费者线程拿到的数
* 据是有顺序的。
*/
public class Test2 {
static Semaphore semaphore = new Semaphore(1);
//这个队列是阻塞操作队列,不同的是,必须一次存一次取
static SynchronousQueue<String> queue = new SynchronousQueue<String>();
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) {
for(int i=0;i<10;i++){
new Thread(new Runnable(){
@Override
public void run() {
String input=null;
try {
semaphore.acquire();
input = queue.take();
System.out.println("take:"+input);
String output = TestDo.doSome(input);
System.out.println(Thread.currentThread().getName()+":"+output);
semaphore.release();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
/*
* queue队列是说,第一次放的时候,放不进去,一旦有人来取,就放进去,瞬间
* 取走。然后再放的时候仍放不进去,直到再有人来取才能再放进去
* 也可以一下子来一个线程要求取,那就瞬间放进去几个,一个线程取走一个。
*
*/
System.out.println("begin:"+(System.currentTimeMillis()/1000));
for(int i =0;i<10;i++){//这行不能动
String input=i+"";//这行不能改动
try {
queue.put(input);
System.out.println(input+"-");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class TestDo{
public static String doSome(String input){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
String output=input+":"+(System.currentTimeMillis()/1000);
return output;
}
}
- java jdk多线程新特性2
- jdk多线程新特性1
- java/反射/JDK新特性
- 【Java】JDK的新特性
- jdk 1.5 新特性 2
- Java之JDK 1.5新特性
- Java基础加强-JDK 5.0 新特性
- JAVA笔记 之 JDK新特性
- java基础--JDK 1.5 新特性
- Java(02)-JDK 5.0 新特性
- Java-JDK各个版本的新特性
- java中JDK的新特性比较
- Java-JDK各个版本的新特性
- Java-JDK各个版本的新特性
- Java-JDK各个版本的新特性
- Java-JDK各个版本的新特性
- Java多线程-新特性-线程池
- Java多线程-新特性-线程池
- jquery ajax实现代码
- 2.Model Underscore Methods(Official Tutorials)
- java 设置WebService超时
- 日积月累--小技巧之一
- jdk多线程新特性1
- java jdk多线程新特性2
- 社保公积金缴纳流程
- MVC模式的流程图
- Linux system函数返回值
- PHP 下载远程文件
- Android开发使用Dom从网络端解析xml文件
- PLSQL导入/导出数据方法
- vs安装web环境遇到的问题-----调试器dll msdbg2.dll 未正确安装
- 轻快的VIM(一):移动