Android 多线程的基本使用
来源:互联网 发布:画电路图用什么软件 编辑:程序博客网 时间:2024/05/14 19:55
Android可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;前者只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是Java中一个类只能继承一个父类,这是这种方式的局限性,后者只需要实现一个接口而已,Java中可以实现多个接口。
继承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 多线程的基本使用
- Win32 多线程的基本使用
- 多线程的基本使用实例
- iOS多线程的基本使用
- 多线程:NSOperation 的基本使用
- 多线程:NSOperation 的基本使用
- python多线程的基本使用
- Android多线程的使用
- 多线程的使用的基本模型
- iOS开发多线程-GCD的基本使用
- 网络多线程-GCD的基本使用
- 网络多线程-GCD的基本使用(2)
- 网络多线程-SDWebImage的基本使用
- 关于多线程的使用一些基本介绍
- IOS多线程基本使用
- 多线程:GCD 基本使用
- Java多线程-基本使用
- 多线程【概述+基本使用】
- 第十二周上机实践项目-阅读程序-4
- 代码阅读工具:Source Navigator和Source Insight
- FZU2232(二分图)
- 数字货币到底解决了哪些问题?
- E - Super Jumping! Jumping! Jumping!——HOJ
- Android 多线程的基本使用
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- eclipse出现configure build path的错误
- OpenGL编程指南第四章:颜色
- RESTful风格的Web服务框架 Swagger
- 移动跨平台开发---cordova(三)
- 核心动画
- 类中成员函数的实现,放在类块里和外部实现的区别
- java中thread的start()和run()的区别