Android 如何监听一个线程的开始和结束
方法一:轮训
比如主线程要等子线程在得到变量“val”值的时候开始用“val”的值来进行工作,使用轮训的方法如下:
public class SubThread extends Thread{
private boolean flag = false;//标志位,用来标识是否应该通知主线程或者其他对象改做事情了
@Override
public void run() {
super.run();
for(int i=;i<;i++){
System.out.println(Thread.currentThread().getName() + " do " + i + "thing");
}
flag = true;
for(int i=;i<;i++){
System.out.println(Thread.currentThread().getName() + " do " + i + "thing");
}
}
public boolean getFlag(){
return flag;
}
}public class Test {
public static void main(String[] args) {
SubThread subThread = new SubThread();
subThread.start();
while(true){
if(subThread.getFlag()){
System.out.println(Thread.currentThread().getName() + " do something ...");
doWork();
break;
}
}
}
private static void doWork() {
System.out.println(Thread.currentThread().getName() + " do work ...");
}
}
可以看出确实实现了效果,但是这种方法太low了,缺点如下:
(1)主线程循环判断标志位是浪费CPU的表现
(2)如果有另外的线程也需要判断,那也得在线程中写一个死循环,代码太无设计思想可言
,看到这里也许有有人已经想到另外一种方法——回调!
方法二,回调
回调就是调用别的对象的方法时把“自己”传进去,然后别的对象在某个时候调用“自己的方法”,代码如下
public interface ThreadCallback {
void threadStartLisener();
void threadEndLisener();
}public class SubRunnable implements Runnable {
private ThreadCallback mThreadCallback;
public SubRunnable(ThreadCallback threadCallback){
this.mThreadCallback = threadCallback;
}
@Override
public void run() {
mThreadCallback.threadStartLisener();
for(int i=;i<;i++){
System.out.println(Thread.currentThread().getName() + " do something "+i);
}
mThreadCallback.threadEndLisener();
}
}public class ThreadCallbackTest implements ThreadCallback{
private static ThreadCallbackTest mThreadCallbackTest = new ThreadCallbackTest();
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + " 开始");
new Thread(new SubRunnable(mThreadCallbackTest)).start();
}
@Override
public void threadStartLisener() {
System.out.println(Thread.currentThread().getName() + " 线程,知道SubRunnable线程开始执行任务了");
}
@Override
public void threadEndLisener() {
System.out.println(Thread.currentThread().getName() + " 线程,知道SubRunnable线程任务执行结束了");
}
}
输出结果如下:
Android 如何监听一个线程的开始和结束的更多相关文章
- Android 如何监听返回键,弹出一个退出对话框
android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...
- [转]Android 如何监听返回键,弹出一个退出对话框
本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...
- Android来电监听和去电监听
我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听 ...
- Android如何监听蓝牙耳机的按键事件
写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
- xamarin android如何监听单击事件
在xamarin android单击事件是最基础的事情,看过菜鸟上的android教程时,java写的都是监听事件,为一个按钮,单选按钮.多选按钮的单击事件有三种,前面两种用的非常普遍,也很简易,我这 ...
- Android 监听 Android中监听系统网络连接打开或者关闭的实现代码
本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...
- Android实现监听控件点击事件
Android实现监听控件点击事件 引言 这篇文章主要想写一下Android实现监听点击事件的几种方法,Activity和Fragment实现起来有些方法上会有些不同,这里也略做介绍. 最近一直在忙一 ...
随机推荐
- 微信小程序云函数 添加数据到数据库
1.新建小程序,建立云开发快速启动模板 这里和普通小程序的区别有三点 一是 project.config.json写上云函数所在目录"cloudfunctionRoot": &qu ...
- 【NOIP2013】转圈游戏 快速幂
题目大意:给你四个整数$n,m,k,x$,求$(x+m\times 10^k)%n$. 直接一个快速幂就好了,注意开$long\ long$. #include<bits/stdc++.h> ...
- 转 ZFC公理系统
http://blog.sina.com.cn/s/blog_5d045b5c0100spld.html 首先,ZFC集合论中的公理大致分为3组: 1.外延公理. 2.子集公理模式.无序对公理.并集公 ...
- 9、如何在Xamarin中进行iOS真机调试和发布
本文主要引导用户如何使用真机调试和编译发布. 概述 使用前的准备: 1.一台IPhone设备 或者IPad 都行看你自己 2.一台Mac主机和搭建好对应的xamarin.ios 开发环境 3.开发者 ...
- LINUX 下 NMAP 内网扫描
#1.扫描内网存活主机 nmap -sP 10.2.24.* |grep for > tmp #2.扫描主机端口 nmap -A -T4 192.168.1.2 #3.扫描主机的所有端口 nma ...
- 【链表】Remove Duplicates from Sorted List II(三指针)
题目: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
- 数据库--oracle图形化管理工具和新增自定义用户
oracle数据库图形化管理工具: 1 navicat工具很小,操作mySQL和SQLServer非常好用,但对于oracle体验性就有点差,要自己下载编码和替换oci文件.下面是解决的方法教程链接 ...
- python3 连接HBase
db_url = 'http://47.93.89.99:8765' from traceback import format_exc import phoenixdb as pb class Uti ...
- VM CentOS7 网络配置问题汇总
0. 前言 在进行配置之前,我们首先需要明确几个概念: I. VM的网络连接方式 ①. 桥接模式(Bridge) 此模式下,VM centOS 在网络中作为一台独立主机存在,它可以访问网络中的任何 ...
- mac上用ssh登录服务失败的排查方法
ssh -vvv user@ip/ traceroute ip telnet ip 22 ping