线程间通信
2021-02-17 12:17
标签:try inter col 并发 cal private 需要 lse handle 目前有个项目,需要多个线程共用一个单例里面的发送数据方法。且这个方法入口每次只能一个一个线程进入。 所以写了一个方法,功能是创建单一的线程,使用队列方法放入数据进行处理。 测试多个线程发送数据 测试如下方法: 调用方法,开始测试: 线程间通信 标签:try inter col 并发 cal private 需要 lse handle 原文地址:https://www.cnblogs.com/bug01/p/12698626.html
public class Test {
private Handler sendHandler;
public Test(){
// 开启接收线程
new Thread(new SendRunnable()).start();
}
/**
* 将消息放入队列
* @param message
*/
public synchronized void sendMessage(String message){
if (sendHandler==null){
return;
}
Looper looper = Looper.myLooper();
Message msg = sendHandler.obtainMessage();
msg.obj = message;
sendHandler.sendMessage(msg);
}
/**
* 独立线程,用于接收队列中要发送的消息。并且排队处理
*/
class SendRunnable implements Runnable {
@Override
public void run() {
String msg;
Looper.prepare();
sendHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
{
System.out.println("收到消息:"+ msg.obj);
System.out.println("模拟处理消息过程..." );
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成消息处理" );
return false;
}
}
});
Looper.loop();
}
}
} Test test = new Test();
/**
* 模拟多线程并发,发送消息
*/
public void beginTest(){
new Thread(new Runnable() {
@Override
public void run() {
final AtomicInteger atomicInteger = new AtomicInteger();
for (int i =0 ;i ){
new Thread(new Runnable() {
@Override
public void run() {
test.sendMessage("ving:" + atomicInteger.getAndIncrement());
}
}).start();
}
}
}).start();
}beginTest();