当前位置: 首页 > news >正文

java两个子线程通信,java – 两个线程如何在两个线程运行时进行通信?

您可以通过几种方式在线程之间进行通信.使用最常用的方法,您可以使用实例变量在线程之间共享信息,但您必须注意只从一个线程写入或同步任何更新到共享变量.或者,您可以使用专为线程间通信设计的Piped I / O流,或在线程之间传递原始数据.一个线程将信息写入流,而另一个线程读取它.

这是一个示例方法,它将从慢速网络连接读取输出并使用线程将其转储到System.out.

public void threads() throws IOException {

final PipedOutputStream outputForMainThread = new PipedOutputStream();

new Thread(new Runnable() {

@Override

public void run() {

while(moreDataOnNetwork()) {

byte[] data = readDataFromNetwork();

try {

outputForMainThread.write(data);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}).start();

BufferedReader reader = new BufferedReader(new InputStreamReader(new PipedInputStream(outputForMainThread)));

for(String eachLine = reader.readLine(); eachLine != null; eachLine = reader.readLine()) {

System.out.println(eachLine);

}

}

然而,几乎听起来你想要一个事件回调机制,当另一个线程检测到某个条件时,会通知一个线程(你的用户界面线程).根据您的平台,大部分内容都已经完成.例如,使用Android,您可以拥有一个确定网格实体移动的线程.它会向主用户界面线程发送更新以重新绘制屏幕.这样的更新可能类似于:

public void gridEntityDidUpdate(final Point fromLocation, final Point toLocation) {

Activity activity = getMainActivity();

activity.runOnUiThread(

new Runnable() {

@Override

public void run() {

updateScreen(fromLocation, toLocation);

if(pointsAreCoincedent(fromLocation, toLocation)) {

System.out.println("Hello there!");

}

}

}

);

}

private void updateScreen(Point fromLocation, Point toLocation) {

//Update the main activity screen here

}

在这种情况下,您有一个后台线程可以解决所有屏幕元素的位置,并在元素位置发生变化时通知主线程.有一种提取方法可以确定2个点是巧合的还是相同的.

相关文章:

  • php7 phpunittest,php - 如何用phpunit运行单一测试方法?
  • zabbix监控php,zabbix监控php状态
  • php语言的form,PHP语言 HTTP请求类,支持GET,POST,Multipart、form-data
  • JAVA定义一个狗看门,为什么我用接口实现狗看门的功能出错?
  • 查看php-fpm配置文件,php-fpm 配置文件检测
  • 用php查ip,php – 有效的ip-位置查询
  • php 怎么取出一个最大值,php max() min() 返回最大值和最小值
  • 公示系统php,企业信用查询公示系统
  • oracle判断单数双数,代码中你所不知道的偶数与奇数的判断方法
  • c 访问oracle视图,Oracle视图
  • Oracle+12c+国家字符集,Oracle 12C CDB字符集修改
  • 确认32位oracle client,32位oracle client
  • 2012安装oracle客户端安装,Windows 2012群集标准版安装Oracle11G
  • linux提示有交换文件,Linux下如何设置交换文件?Linux下设置交换文件的方法
  • linux smartctl 命令,使用smartctl命令检查磁盘