Android 多线程实现异步执行demo,线程池使用demo

方法1:

1、常见Runnable对象设置同步代码run运行体

class AutoSaleTicket implements Runnable {private int ticket = 20;public void run() {while (true) {// 循环是指线程不停的去卖票// 当操作的是共享数据时,用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容synchronized (this) {if (ticket > 0) {// 不要在同步代码块里面sleep,作用只是自已不执行,也不让线程执行System.out.println("lgq"+Thread.currentThread().getName()+ " 卖出 第 " + (20 - ticket + 1) + " 张票");ticket--;} else {break;}}// 所以把sleep放到同步代码块的外面,这样卖完一张票就休息一会,让其他线程再卖,这样所有的线程都可以卖票try {Thread.sleep(200);} catch (Exception ex) {}}}
}

2、创建多线程,启动多线程

AutoSaleTicket ticket = new AutoSaleTicket();
Thread t1 = new Thread(ticket, "11东城代售");
Thread t2 = new Thread(ticket, "22西城代售");
Thread t3 = new Thread(ticket, "33朝阳代售");
Thread t4 = new Thread(ticket, "44海淀代售");
t1.start();
t2.start();
t3.start();
t4.start();

3、多线程同步执行结果

03-22 15:40:43.167 9967-10272/com.tianxin.httpheader I/System.out: lgq11东城代售 卖出 第 1 张票
03-22 15:40:43.167 9967-10274/com.tianxin.httpheader I/System.out: lgq33朝阳代售 卖出 第 2 张票
03-22 15:40:43.167 9967-10275/com.tianxin.httpheader I/System.out: lgq44海淀代售 卖出 第 3 张票
03-22 15:40:43.167 9967-10273/com.tianxin.httpheader I/System.out: lgq22西城代售 卖出 第 4 张票
03-22 15:40:43.368 9967-10272/com.tianxin.httpheader I/System.out: lgq11东城代售 卖出 第 5 张票
03-22 15:40:43.370 9967-10273/com.tianxin.httpheader I/System.out: lgq22西城代售 卖出 第 6 张票
03-22 15:40:43.370 9967-10274/com.tianxin.httpheader I/System.out: lgq33朝阳代售 卖出 第 7 张票
03-22 15:40:43.371 9967-10275/com.tianxin.httpheader I/System.out: lgq44海淀代售 卖出 第 8 张票
03-22 15:40:43.570 9967-10273/com.tianxin.httpheader I/System.out: lgq22西城代售 卖出 第 9 张票
03-22 15:40:43.571 9967-10275/com.tianxin.httpheader I/System.out: lgq44海淀代售 卖出 第 10 张票
03-22 15:40:43.572 9967-10272/com.tianxin.httpheader I/System.out: lgq11东城代售 卖出 第 11 张票
03-22 15:40:43.572 9967-10274/com.tianxin.httpheader I/System.out: lgq33朝阳代售 卖出 第 12 张票
03-22 15:40:43.771 9967-10273/com.tianxin.httpheader I/System.out: lgq22西城代售 卖出 第 13 张票
03-22 15:40:43.772 9967-10275/com.tianxin.httpheader I/System.out: lgq44海淀代售 卖出 第 14 张票
03-22 15:40:43.773 9967-10272/com.tianxin.httpheader I/System.out: lgq11东城代售 卖出 第 15 张票
03-22 15:40:43.773 9967-10274/com.tianxin.httpheader I/System.out: lgq33朝阳代售 卖出 第 16 张票
03-22 15:40:43.973 9967-10273/com.tianxin.httpheader I/System.out: lgq22西城代售 卖出 第 17 张票
03-22 15:40:43.973 9967-10275/com.tianxin.httpheader I/System.out: lgq44海淀代售 卖出 第 18 张票
03-22 15:40:43.974 9967-10272/com.tianxin.httpheader I/System.out: lgq11东城代售 卖出 第 19 张票
03-22 15:40:43.974 9967-10274/com.tianxin.httpheader I/System.out: lgq33朝阳代售 卖出 第 20 张票

 

方法2线程池使用:

创建

class MyTask implements Runnable {private int taskNum;public MyTask(int num) {this.taskNum = num;}@Overridepublic void run() {System.out.println("lgq正在执行task "+taskNum);try {Thread.currentThread().sleep(4000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("lgqtask "+taskNum+"执行完毕");}
}

执行

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));for(int i=0;i<15;i++){MyTask myTask = new MyTask(i);executor.execute(myTask);System.out.println("lgq线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
}
executor.shutdown();

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mvc5 控制器,视图简单说明

本系列会比Mvc4更详细。Mvc4记录或没记录的东西这里也会提到。 控制器 自动装配&#xff1a; 一般自动装配对于添加的时候比较好用 视图&#xff1a; 控制器返回的视图&#xff0c;其实就是一些静态的HTML。动态性不好&#xff0c;从控制器传递少量数据&#xff0c;最简单使用…

前端学习(2734):重读vue电商网站44之使用 echarts

echarts 官方文档传送门 根据官方文档示例&#xff0c;我们先展示测试数据。 Javascript <template><div><!-- 面包屑导航区域 --><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: /home }">首页</el-bre…

No fallback instance of type class found for feign client user-service(转)

No fallback instance of type class found for feign client user-service&#xff08;转&#xff09; 1、错误日志 在 feign 开启熔断&#xff0c;配置 fallback 类&#xff0c;实现当前接口的实现类时&#xff0c;报错信息如下&#xff1a; Error starting ApplicationCont…

Redis在windows下安装过程

https://www.cnblogs.com/M-LittleBird/p/5902850.html 一、下载windows版本的Redis 去官网找了很久&#xff0c;发现原来在官网上可以下载的windows版本的&#xff0c;现在官网以及没有下载地址&#xff0c;只能在github上下载&#xff0c;官网只提供linux版本的下载 官网下载…

前端学习(2735):重读vue电商网站45之项目优化上线

优化Vue项目&#xff0c;部署Vue项目 项目优化 添加进度条 nprogress 进度条官方文档传送门 打开 vue-ui 面板&#xff0c;选择依赖&#xff0c;输入 nprogress 进行安装相关依赖。 npm Javascript npm install --save nprogress在 main.js 入口文件中&#xff0c;进行相关…

Push rejected: Push to origin/master was rejected

Push rejected: Push to origin/master was rejected 1、错误日志 23:04 Maven projects need to be imported: Import Changes Enable Auto-Import23:05 4 files committed: 初始化项目23:06 Push rejected: Push to origin/master was rejected23:07 2 files …

基本卷-动态卷性能测评(未完待续)

320G 同一磁盘复制1G 1个文件 //基本磁盘 27秒 FastCopy 1.62 128M缓存 37秒 Windows自带复制 //动态卷 15秒 Windows自带复制 27秒 FastCopy 1.62 128M缓存 28秒 FastCopy 1.62 32M缓存 320G 同一磁盘复制1G 4470个文件 //动态卷 54秒 Windows自带复制 考虑是否是磁盘的原因 3…

前端学习(2736):重读vue电商网站46之执行build 时报错

Error: No module factory available for dependency type: CssDependency 解决办法&#xff1a; 参考&#xff1a;解决webpack打包报错 No module factory available for dependency type: CssDependency 在执行 build 命令期间移除所有的 console babel-plugin-transform…

Android 获取光线强弱,开启闪光灯,关闭闪光灯

1、获取光线强度 &#xff08;1&#xff09;实现传感器接口 implements SensorEventListener 实例化 private SensorManager mSensroMgr;//传感器管理类 mSensroMgr (SensorManager) getSystemService(Context.SENSOR_SERVICE); &#xff08;2&#xff09;监听传感器 Ove…

Python 文件 fileno() 方法

描述 Python 文件 fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型)&#xff0c;可用于底层操作系统的 I/O 操作。 语法 fileno() 方法语法如下&#xff1a; fileObject.fileno() 参数 无 返回值 返回文件描述符。 实例 以下实例演示了 fileno() 方法的使用&am…

@RequestParam @PathVariable

RequestParam PathVariable 1、Request参数 在访问各种各样网站时&#xff0c;经常会发现网站的URL的最后一部分形如&#xff1a;&#xff1f;xxxxyyyy&zzzzwwww。这就是HTTP协议中的Request参数&#xff0c;它有什么用呢&#xff1f;先来看一个例子&#xff1a; 在知乎中…

前端学习(2737):重读vue电商网站47之生成打包报告

打包时&#xff0c;为了直观地发现项目中存在的问题&#xff0c;可以在打包时生成报告。生成报告的方式有两种&#xff1a; ① 通过命令行参数的形式生成报告 Javascript // 通过 vue-cli 的命令选项可以生成打包报告 // --report 选项可以生成 report.html 以帮助分析包内容 …

蓄水池抽样算法 Reservoir Sampling

2018-03-05 14:06:40 问题描述&#xff1a;给出一个数据流&#xff0c;这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法&#xff0c;使得数据流中所有数据被选中的概率相等。 问题求解&#xff1a;如果是长度已知或者有限的问题&…

Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo,SSL证书验证

SSL证书验证 rootca证书资源 调用 //信任所有证书 HTTPSCerUtils.setTrustAllCertificate(okHttpBuilder); //信任raw资源目录下的证书 HTTPSCerUtils.setCertificate(context, okHttpBuilder, R.raw.rootca); //传入证书…

@ResponseBody ResponseEntity

ResponseBody ResponseEntity 1、产生疑问 我们知道&#xff0c;如果在 Controller 的某个方法上加上 ResponseBody 注解&#xff0c;那么你就能拿到 json 数据。 如果你只是知道这么用&#xff0c;那么你应该知道 ResponseBody 的具体作用&#xff1a; 其将方法的返回值通过…

前端学习(2738):重读vue电商网站48之通过 chainWebpack 自定义打包入口

示例代码如下&#xff1a; Javascript module.exports {chainWebpack: config > {config.when(process.env.NODE_ENV production, config > {config.entry(app).clear().add(./src/main-prod.js)})config.when(process.env.NODE_ENV development, config > {confi…

22图的遍历

图的遍历 图的遍历&#xff1a;搜索属于图的基本运算。树的先序遍历和按层遍历的推广。图的遍历也称搜索&#xff0c;主要有&#xff1a; 先深搜索&#xff08;depth-first search&#xff09;——深度优先搜索——dfs搜索 先广搜索&#xff08;breadth-first search&#xff0…

Cannot resolve symbol 'R',Failed to resolve: constraint-layout

1、当在github上下载demo项目在Android studio启动时&#xff0c;提示Cannot resolve symbol R。虽然提示错误&#xff0c;但是运行项目并没有问题 原因是gradle版本高于本地Android studio的gradle版本 把 classpath com.android.tools.build:gradle:3.3.1 改为 classpat…

Vue中import引入模块路径时的@符号

Vue中import引入模块路径时的符号 1、ES6 模块主要有两个功能&#xff1a;export 和 import export&#xff1a;用户对外输出本模块&#xff08;一个文件可以理解为一个模块&#xff0c;比如 aaa.js bbb.js&#xff09;变量的接口 。 import&#xff1a;用于在一个模块中加载另…

Android Log工具类,Toast工具类,获取当前方法名称

Log新晋工具方法 public class LgqLog {private static boolean ifShowtrue;private static int sCurrentLogLevel Log.DEBUG;private static String sPrefix null;IntDef({ Log.VERBOSE, Log.DEBUG, Log.INFO, Log.WARN, Log.ERROR })Retention(RetentionPolicy.SOURCE)publ…