2016.12.02
明天,哦不对,准确来说应该是今天考现场总线,就看了一点,但求不挂,今年的课都不知所云,练车,上课,实验,考试,各种忙。哈哈,不过值得庆幸的是,连续几天敲代码,竟然有了感觉,现在遇到了各种牛人,感觉能学到好多东西,也深深体会到自己作为一个学渣该好好学习了。
自定义线程一般有两种方式:
方式一:
1.自定义一个类继承Thread类
2.重写Thread类中的run方法,把自定义线程的任务写在run()方法上
3.创建Thread的子类对象,并且调用start方法启动一个线程
注意:千万不要直接调用run()方法,调用start方法的时候线程开启,线程开启就会直接调用run();如果直接调用run()方法,就相当于调用了一个普通方法。
方式二:
1.自定义一个类实现Runnable接口。
2.实现Runable接口的run方法,把自定义线程的任务定义在run()方法上。
3.创建Runnable实现类对象。
4.创建Thread类的对象,并且把Runnable()实现类的对象作为参数进行传递。
5.调用Thread对象的start方法开启一个线程。
public class Demo2 implements Runnable{ public void run(){ for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { //创建Runnable实现类的对象 Demo2 d = new Demo2(); //创建Thread类的对象, 把Runnable实现类对象作为实参传递。 Thread t = new Thread(d,"庹成");//Thread类使用Target变量记录了d对象, //调用thread对象的start方法开启线程。 t.start(); /* Thread类 的run方法 * @Override public void run() { if (target != null) { target.run(); //就相当于Runnable实现类的对象的run方法作为了Thread对象的任务代码了。 } } */ } }
这里有两个问题:
问题1.请问Runnable实现类的对象是线程对象吗?
Runnable实现类的对象不是一个线程对象,只不过是实现了Runnable接口的对象而已。
问题2.为什么要把Runnable实现类的对象作为实参传递给Thread对象呢?作用是什么?
作用就是把Runnable实现类的对象的run()方法作为了线程的任务代码去执行了。
推荐使用第二种,实现Runnable接口。因为java是单继承,多实现的
class SaleTicket implements Runnable{ int num = 50; // 票数 @Override public void run() { while(true){ synchronized ("锁") { if(num>0){ System.out.println(Thread.currentThread().getName()+"售出了第"+ num+"号票"); num--; }else{ System.out.println("售罄了.."); break; } } } } } public class Demo4 { public static void main(String[] args) { //创建了一个Runnable实现类的对象 SaleTicket saleTicket = new SaleTicket(); //创建三个线程对象模拟三个窗口 Thread thread1 = new Thread(saleTicket,"窗口1"); Thread thread2 = new Thread(saleTicket,"窗口2"); Thread thread3 = new Thread(saleTicket,"窗口3"); //开启线程售票 thread1.start(); thread2.start(); thread3.start(); } }
这里为什么不用static来修饰int num,会不会产生150张票,答案是不会,因为只创建了一个SaleTicket对象,加了之后不会怎样,就是java的生命周期变长了。
相关推荐
本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...
Java中有两种实现多线程的方式。一是直接继承Thread类,二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢? 为了回答这个问题,我们可以通过编写一段代码来进行分析。我们用代码来模拟铁路...
Java 语言提供了多种方式来实现多线程编程,今天我们将讨论其中的两种实现方式,并使用四个线程来演示对变量 J 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...
### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...
在Java中,创建和使用线程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式在使用上有一些区别,每种方式都有其特定的用法和特点。 首先,继承Thread类的方式。通过继承Thread类来创建...
1.方式1:继承 QThread 类方式:...两种方式的选择取决于具体的需求和设计。仅需简单的线程操作,继承 QThread 类方式可能更为简洁。如果需要更灵活的线程控制和对象交互,使用类对象的 moveToThread() 方式可能更适合
本文将深入探讨两种传统的Java线程实现方式,并通过一个具体的例子来阐述如何创建和管理这些线程。 首先,我们来看第一种线程实现方式:继承`Thread`类。当你创建一个新的类继承自`java.lang.Thread`,你可以重写它...
总的来说,理解和熟练掌握Android(Java)线程的这两种实现方式,对于提升应用性能和用户体验至关重要。在编写高效、流畅的Android应用时,合理地利用线程管理,能够确保应用程序在多任务环境下的稳定性和响应速度。
在不同的操作系统和平台上,线程的实现方式有所不同。例如,POSIX的P-threads是用户级线程库,Java提供了自己的线程库,Windows2000/XP等使用内核级线程,而Linux系统上的实现则更加多样化,既有纯用户级线程也有...
事件对象有两种状态:有信号(Signaled)和无信号(Unsignaled)。当事件为有信号状态时,等待该事件的线程可以继续执行。事件有手动重置和自动重置两种类型。手动重置事件在释放一个等待线程后仍保持有信号状态,...
本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...
在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...
本篇文章将深入探讨两种实现多线程的方式:继承`Thread`类和实现`Runnable`接口,并分析它们之间的区别。 首先,让我们了解这两种方式的基本概念: 1. **继承Thread类**:这是创建多线程的直接方式,通过创建一个...
首先,我们要了解多线程的两种基本实现方式: 1. **线程对象创建**:这是最常见的方式,程序员通过调用易语言提供的线程创建函数(如“创建线程”命令)创建一个新的线程。线程对象有自己的执行入口点,通常是一个...
【标题】"Kafka Demo 两种线程消费方式"展示了在Kafka中处理消息的两种常见线程模型,这是理解Kafka消费者工作原理的关键部分。Kafka是一个分布式流处理平台,用于构建实时数据管道和应用,它允许生产者发布消息到...
在本文中,我们将深入探讨Apache Kafka的两种线程消费方式,这是基于提供的标题"Kafka Demo,两种线程消费方式"。Kafka是一种分布式流处理平台,广泛用于实时数据处理和消息传递。在这个示例中,我们将关注如何使用...
Java多线程编程中,创建线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。这两种方式虽然都能实现多线程,但它们在实际应用中有着不同的特性和适用场景。 首先,我们来看看继承`Thread`类的方式。这种方式...
通过深入理解线程的基本概念、生命期、状态转换、调度原则以及实现方式,可以有效地利用多线程来优化应用程序。同时,合理地处理线程间的同步和避免死锁也是构建稳定、可靠的多线程应用的关键。
总结来说,易语言提供了“创建线程”和“启动进程”两种多线程实现方式,分别适用于不同场景。学习和掌握这些方法,对于易语言的开发者来说,是提高程序性能和解决复杂问题的重要技能。结合提供的源码,我们可以更...
本文将深入探讨四种常用的iOS多线程开发方式:pthread、NSThread、NSOperation及NSOperationQueue,以及Grand Central Dispatch(GCD)。 首先,让我们了解下pthread。pthread是POSIX线程库,它在iOS中被用于跨平台...