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();
结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
简单的demo,对应的我的博客地址是http://blog.csdn.net/u012320459/article/details/47271319
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
1、Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。 2、多线程是并发执行的,交替占有cpu执行,请编写示例程序,并观察输出结果。 3、采用线程同步方法...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
实现Runnable接口的类必须使用Thread类的实例才能创建线程,通过Runnable接口创建线程分为以下两步
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而...
add 实验一:多线程/2.Runnable接口. 实验八:JDBC数据库编程二——存储过程与函数 add 实验八:JDBC数据库编程二——存储过程与函数/2.addTwoNumAndReturn. 实验十:Socket编程 add 实验十:Socket编程/...
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
thread 线程类 实现runnable接口
android handler runnable使用实例(关键是内部run中停止)
我相信对初学者这是很有帮助的,了解两中实现多线程的方法的不同这处
内容是两个多线程编程的demo: 1.一个线程添加,一个线程减少 2.a线程呼叫b线程,b线程呼叫c线程,c线程呼叫a线程。 能学到: 在学习多线程编程中,我们要把大家用的对象独立出来,然后作为一个 变量传递到各个线程...
C#多线程,System.Threading.Thread类,线程同步等
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
一个简单的多线程代码示例,Java实现,用于实现同一时刻,只允许一个线程调用执行的代码块或类,即synchronized的如何使用(多线程实现),实现 Runnable
分别用Thread类和Runnable接口实现的阶乘的计算过程及结果的显示(本来一开始设置的不要积分,不知道为啥变得需要积分了,故此调整一下)
1、 认识Thread和Runnable 2、 认识Thread的start和run 3、 线程状态说明 4、 Timer 和 Timer Task 的使用 1) 一个简单的Demo
Android学习笔记(三一):线程:Message和Runnable
在Java中只支持单继承,因此通过继承Thread类创建线程有一定的局限性,这时可以使用另一种方式,即实现Runnable接口来创建线程。通过这种方式需要在Thread(Runnable target)的构造方法中,传递一个实现了Runnable...