Android开发之多线程编程Thread和Runnable使用
来源:互联网 发布:令狐冲打少林寺知乎 编辑:程序博客网 时间:2024/05/16 07:33
Android开发之多线程编程Thread和Runnable使用
继承Thread类
- package com.vixtel.tools;
- /**
- * @author yangxiaolong
- * @2014-7-28
- */
- public class SyncThread extends Thread {
- @Override
- public void run() {
- synchronized (this) {
- for (int i = 0; i < 5; i++) {
- System.out.println(Thread.currentThread().getName()
- + " synchronizedloop " + i);
- }
- }
- }
- }
运行:
- SyncThread st1 = new SyncThread();
- SyncThread st2 = new SyncThread();
- st1.start();
- st2.start();
Runnable接口
- package com.vixtel.tools;
- /**
- * @author yangxiaolong
- * @2014-7-28
- */
- public class SyncRunnable implements Runnable {
- @Override
- public void run() {
- synchronized (this) {
- for (int i = 0; i < 5; i++) {
- System.out.println(Thread.currentThread().getName()
- + " synchronizedloop " + i);
- }
- }
- }
- }
执行:
- SyncRunnable sr1 = new SyncRunnable();
- SyncRunnable sr2 = new SyncRunnable();
- Thread td1 = new Thread(sr1, "td1");
- Thread td2 = new Thread(sr2, "td2");
- //多个Thread也可以同时使用一个Runbale,
- //由于多个Thread操作同一个Runnable对象,这样同步锁就需要使用了
- td1.start();
- td2.start();
接下来使用经典的模拟火车卖票程序,来理解Thread和Runnable在特定场景下的区别和联系,以及synchronized在线程中的作用:
- class AutoSaleTicket implements Runnable {
- private int ticket = 20;
- public void run() {
- while (true) {// 循环是指线程不停的去卖票
- // 当操作的是共享数据时,用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容
- synchronized (this) {
- if (ticket > 0) {
- // 不要在同步代码块里面sleep,作用只是自已不执行,也不让线程执行
- System.out.println(Thread.currentThread().getName()
- + " 卖出 第 " + (20 - ticket + 1) + " 张票");
- ticket--;
- } else {
- break;
- }
- }
- // 所以把sleep放到同步代码块的外面,这样卖完一张票就休息一会,让其他线程再卖,这样所有的线程都可以卖票
- try {
- Thread.sleep(200);
- } catch (Exception ex) {
- }
- }
- }
- }
我们开始执行售票程序:
- AutoSaleTicket ticket = new AutoSaleTicket();
- Thread t1 = new Thread(ticket, "东城代售");
- Thread t2 = new Thread(ticket, "西城代售");
- Thread t3 = new Thread(ticket, "朝阳代售");
- Thread t4 = new Thread(ticket, "海淀代售");
- t1.start();
- t2.start();
- t3.start();
- t4.start();
结果:
0 0
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- Android开发之多线程编程Thread和Runnable使用
- java编程之多线程 runnable的使用
- Android之多线程解析(一)之Thread、Runnable
- java之多线程中Thread类和Runnable接口使用方法
- 线程(Thread) 和 Runnable
- Android 线程Thread Runnable解析
- Android线程—Thread、Runnable
- 线程创建Thread和Runnable
- Thread和Runnable创建线程
- Android 线程学习之 Runnable和Thread的区别
- Android开发之多线程的操作方式Thread,TimerTask,AsyncTask
- android之多线程编程
- java面试题
- iOS---打印
- 第一篇从今天的ArrayAdapter开始
- RMAN实战16:ORACLE数据库的不完全恢复和闪回
- 网络编程中的spring-servlet.xml文件
- Android开发之多线程编程Thread和Runnable使用
- 如何成为数据分析师
- Java基础十大方向
- hive udaf开发入门和运行过程详解
- SQL Server DBA面试知识点(三)--SQL Server如何实现高可用性
- 计算机组成原理课程设计-基本模型机的设计与实现
- Theano-Deep Learning Tutorials 笔记:Getting Started
- 在64位ubuntu上安装tensorflow
- 在Eclipse中导入Android源码(成功)