# handle-message **Repository Path**: quella01/handle-message ## Basic Information - **Project Name**: handle-message - **Description**: handle-message是仿照Android的Handle机制实现的java多线程通信SDK - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2019-02-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: utils **Tags**: None ## README # handle-message #### 介绍 **handle-message是仿照Android的Handle机制实现的java多线程通信SDK,使用简单,功能强大** 我们在主线程开启一个子线程,然后想要得到子线程的结果,大多数情况下是使用Thread.join()。然而,Thread.join()是会堵塞的,可能有些时候并不想等子线程必须运行完,主线程才能继续执行,一句话概况:需要做到能异步通信,而handle-message正是解决了这样的问题。 话不多说,直接上示例代码: ```java //主线程Looper准备 Looper.prepareMainLooper(); //创建Handler final MainHandler handler = new MainHandler(); //开启线程池 Executor executor = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { final int position = i + 1; System.out.println(i); executor.execute(new Runnable() { @Override public void run() { try { //子线程传任务到主线程 handler.postDelayed(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " : " + position); } },1000); Thread thread = Thread.currentThread(); //子线程传消息到主线程 Message.obtain(handler,position,position,position,"主线程,你好!我是线程:"+thread.getName()).sendToTarget(); } catch (Exception e) { e.printStackTrace(); } } }); } } ``` ```java /** * 主线程处理子线程传回的消息 */ private static class MainHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case WhatConstants.WHAT_ONE: String obj1 = (String) msg.obj; System.out.println(obj1); break; case WhatConstants.WHAT_TWO: String obj2 = (String) msg.obj; System.out.println(obj2); break; case WhatConstants.WHAT_THREE: String obj3 = (String) msg.obj; System.out.println(obj3); break; case WhatConstants.WHAT_FOUR: String obj4 = (String) msg.obj; System.out.println(obj4); break; case WhatConstants.WHAT_FIVE: String obj5 = (String) msg.obj; System.out.println(obj5); break; case WhatConstants.WHAT_SIX: String obj6 = (String) msg.obj; System.out.println(obj6); break; case WhatConstants.WHAT_SEVEN: String obj7 = (String) msg.obj; System.out.println(obj7); break; case WhatConstants.WHAT_EIGHT: String obj8 = (String) msg.obj; System.out.println(obj8); break; case WhatConstants.WHAT_NINE: String obj9 = (String) msg.obj; System.out.println(obj9); break; case WhatConstants.WHAT_TEN: String obj10 = (String) msg.obj; System.out.println(obj10); break; } } } ```