通过卖票来进行解释:
1.ThreadTicket.java:
public static void main(String[] args) {
// sell1();
sell2();
}
public static void sell2() {
MyRunnable mt = new MyRunnable();
new Thread(mt).start();// 同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();// 个实例化对象mt,就会出现异常
new Thread(mt).start();
}
public static void sell1() {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();// 每个线程都各卖了10张,共卖了30张票
mt2.start();// 但实际只有10张票,每个线程都卖自己的票
mt3.start();// 没有达到资源共享
}
2.MyThread.java:
public class MyThread extends Thread {
private int ticket = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
3.MyRunnable.java:
public class MyRunnable implements Runnable {
private int ticket = 10;
@Override
public void run() {
for (int i = 0; i < 20; i++) {
if (this.ticket > 0) {
System.out.println("卖票:ticket" + this.ticket--);
}
}
}
}
分享到:
相关推荐
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接...不过,理解基本的`Runnable`接口实现是掌握Java多线程编程的基础。
#### 二、实现Runnable接口 1. **定义**: - `Runnable`接口同样位于`java.lang`包下。 - 实现该接口的类只需要提供`run()`方法的实现即可,然后可以通过`Thread`类来启动这个可运行的任务。 2. **示例代码**: ...
Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本篇文章将深入探讨通过实现Runnable接口来创建线程的方法,以及这种方式相比于直接继承Thread类的优势。 首先,我们来看Runnable接口。在...
本篇文章将深入探讨如何利用`Thread`类和`Runnable`接口来实现阶乘计算的多线程解决方案。阶乘计算是数学中的一个概念,对于非负整数n,其阶乘表示为所有小于等于n的正整数的乘积,记作n!。 首先,我们来看如何使用...
2. **实现Runnable接口** - **步骤**: 1. 定义一个类实现`Runnable`接口。 2. 实现`run()`方法,编写线程体代码。 3. 创建该类的实例,并将其作为参数传递给`Thread`构造函数创建`Thread`对象,然后调用`start...
在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...
虽然这些在`Runnable`实例中没有直接体现,但了解它们对于理解和使用多线程至关重要。 1. `synchronized`:用于同步访问共享资源,确保同一时间只有一个线程能执行特定代码块。 2. `wait()`, `notify()`, `...
1. **为什么要使用Runnable接口?** - Java中的类只能单继承,如果一个类需要继承其他类(例如,它可能已经继承了一个特定业务逻辑的类),那么就不能直接继承`Thread`。`Runnable`接口提供了解决这个问题的方法,...
Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...
起新线程需要new一个Thread对象,将实现Runnable接口的类作为Thread构造器参数。这样才能实现起新线程。 输出效果如下所示,main是一个线程、Runner 是另一个线程。 main Thread:------0 Runner Thread:------0 ...
在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。本篇主要讨论实现Runnable接口的方式。 首先,我们要了解实现Runnable接口的基本步骤: 1. 定义一个类实现Runnable接口。这一步是为了创建...
本篇将基于`Runnable`接口提供一个简单的多线程下载示例,帮助开发者理解如何在Android中实现这一功能。 首先,我们要明白在Android中,主线程(UI线程)负责处理用户交互和更新界面,因此,长时间的网络请求或计算...
**实现Runnable接口**的优势在于可以避免单继承的限制,因为一个类可以实现多个接口。此外,这种方式更符合“面向接口编程”的原则,使得代码更加灵活。 在定义线程时,通常推荐使用实现`Runnable`接口的方式,除非...
任何实现了Runnable接口的类都可以创建一个Runnable对象,然后将这个对象传递给Handler的`post()`或`sendMessage()`方法,使得`run()`方法能在Handler的关联线程中执行。 `Looper`是Android消息循环的核心,它负责...
在Java中,有两种主要的方法来创建线程:通过继承`Thread`类和实现`Runnable`接口。本篇文章将深入探讨如何使用`Runnable`接口创建线程,并与`Thread`类创建线程的方式进行比较。 首先,我们来看`Runnable`接口。`...
**实现Runnable接口** 如果不想受限于单继承,可以选择实现`Runnable`接口。创建一个类并实现`Runnable`接口,然后将这个类的实例传递给`Thread`类的构造函数,以此创建线程。`TwoThread`类就是一个例子,它实现了`...
在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。...总之,理解和合理运用这两种多线程实现方式,将有助于构建更加健壮和高效的并发应用程序。
首先,我们需要理解Android主线程,也被称为UI线程,它负责处理用户界面的更新和事件响应。如果在主线程中执行长时间运行的任务,会阻塞UI,导致应用无响应(ANR)。因此,Android开发者需要学习如何正确地使用异步...
【Java大作业——一个时钟程序】 在Java编程学习中,设计一个时钟程序是一项常见的实践任务,旨在帮助学生巩固面向对象编程的...通过这样的练习,学生能更好地理解和应用Java语言,为未来的软件开发奠定坚实的基础。
理解和妥善处理中断是编写可控制的多线程程序的重要部分。 10. **守护线程(Daemon Thread)**:守护线程在没有非守护线程运行时自动结束,常用于后台服务,如垃圾收集器。 通过学习和实践上述知识点,你将能够...