码迷,mamicode.com
首页 > 编程语言 > 详细

线程间通信

时间:2020-04-14 17:01:27      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:try   inter   col   并发   cal   private   需要   lse   handle   

目前有个项目,需要多个线程共用一个单例里面的发送数据方法。且这个方法入口每次只能一个一个线程进入。

所以写了一个方法,功能是创建单一的线程,使用队列方法放入数据进行处理。


 

测试多个线程发送数据

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 <20; i ++){ new Thread(new Runnable() { @Override public void run() { test.sendMessage("ving:" + atomicInteger.getAndIncrement()); } }).start(); } } }).start(); }

调用方法,开始测试: 

beginTest();

线程间通信

标签:try   inter   col   并发   cal   private   需要   lse   handle   

原文地址:https://www.cnblogs.com/bug01/p/12698626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!