/**
* @Description:
* @param @param args
* @return void 返回类型
*/
public static void main(String[] args) {
// 线程池
ExecutorService exec = Executors.newCachedThreadPool();
// 只能5个线程同时访问
final Semaphore semp = new Semaphore(5);
// 模拟20个客户端访问
for (int index = 0; index < 20; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
// 获取许可
semp.acquire();
System.out.println("获得Accessing: " + NO);
Thread.sleep((long) (Math.random() * 10000));
// 访问完后,释放
semp.release();
System.out.println("剩余可用信号-----------------"
+ semp.availablePermits());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
exec.execute(run);
}
// 退出线程池
exec.shutdown();
}
获得Accessing: 1 获得Accessing: 5 获得Accessing: 2 获得Accessing: 3 获得Accessing: 0 剩余可用信号-----------------1 获得Accessing: 4 剩余可用信号-----------------1 获得Accessing: 9 剩余可用信号-----------------1 获得Accessing: 8 剩余可用信号-----------------1 获得Accessing: 6 剩余可用信号-----------------1 获得Accessing: 10 剩余可用信号-----------------1 获得Accessing: 11 剩余可用信号-----------------1 获得Accessing: 12 剩余可用信号-----------------1 获得Accessing: 13 剩余可用信号-----------------1 获得Accessing: 7 剩余可用信号-----------------1 获得Accessing: 15 剩余可用信号-----------------1 获得Accessing: 16 剩余可用信号-----------------1 获得Accessing: 17 剩余可用信号-----------------1 获得Accessing: 14 剩余可用信号-----------------1 获得Accessing: 18 剩余可用信号-----------------1 获得Accessing: 19 剩余可用信号-----------------1 剩余可用信号-----------------2 剩余可用信号-----------------3 剩余可用信号-----------------4 剩余可用信号-----------------5
package com.jx.test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;
public class testPipe {
/**
* @Description:
* @param @param args
* @return void 返回类型
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 创建一个管道
Pipe pipe = Pipe.open();
final Pipe.SinkChannel psic = pipe.sink();
// 要向管道写数据,需要访问sink通道
final Pipe.SourceChannel psoc = pipe.source();
// 从读取管道的数据,需要访问source通道
Thread tPwriter = new Thread() {
public void run() {
try {
System.out.println("send.....");
// 创建一个线程,利用管道的写入口Pipe.SinkChannel类型的psic往管道里写入指定ByteBuffer的内容
int res = psic.write(ByteBuffer
.wrap("Hello,Pipe!测试通讯.....".getBytes("utf-16BE")));
System.out.println("send size:" + res);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
;
Thread tPreader = new Thread() {
public void run() {
int bbufferSize = 1024 * 2;
ByteBuffer bbuffer = ByteBuffer.allocate(bbufferSize);
try {
System.out.println("recive.....");
// 创建一个线程,利用管道的读入口Pipe.SourceChannel类型的psoc将管道里内容读到指定的ByteBuffer中
int res = psoc.read(bbuffer);
//数据未
System.out.println("recive size:"+res+" Content:" + ByteBufferToString(bbuffer));
}
catch (Exception e) {
e.printStackTrace();
}
}
}
;
tPwriter.start();
tPreader.start();
}
/**
*ByteBuffer--> String的转换函数
*/
public static String ByteBufferToString(ByteBuffer content) {
if (content == null || content.limit() <= 0
|| (content.limit() == content.remaining())) {
System.out.println("不存在或内容为空!");
return null;
}
int contentSize = content.limit() - content.remaining();
StringBuffer resultStr = new StringBuffer();
for (int i = 0; i < contentSize; i += 2) {
resultStr.append(content.getchar(i));
}
return resultStr.toString();
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有