线程与进程很相似,他们都是程序的一个顺序执行机构,但又有一些区别。进程是一个实体,每个进程都有自己独立的状态和自己的专用数据段。线程则共享数据,同一个程序中的所有线程只有一个数据段,线程间可能互相影响,比如数据访问的互斥和同步。
线程本身的数据通常只有寄存器数据和程序执行时的堆栈段,所以线程的切换比进程的负担要小。线程不能自动运行,必须跻身在某一进程中,由进程触发。一个进程可以有多个线程且进程间不共用线程。
实现多线程有两种方法,一是继承Thread类,二是实现Runnable接口。
继承Thread类创建线程时,首先要定义一个Thread类的子类,并在该子类中重写run()方法。run()方法是线程体,说明该线程的具体操作。需要创建线程时,只需创建该子类的对象在调用其start()方法即可。
实现Runnable接口创建线程必须重写该接口的run()方法(Runnable接口只有一个run()方法)。
由于Java是单继承语言,不直接支持多继承,如果一个类已经是其他类的子类,就不能在继承Thread方法使该类成为线程类,这时就要采用实现Runnable接口的方式。
两种方法创建的线程中具有相同目标对象的线程可以共享内存单元,但是实现Runnable接口的线程去创建目标对象的类可以是某个特定类的子类,因此实现Runnable接口创建线程比继承Thread类创建线程更灵活。
举几个小例子来看一下哈
继承Thread类实现的多线程:
class MyThread1 extends Thread{
private String name;
public MyThread1(String name){
this.name= name;
}
public void run(){
for(int i=0;i<15;i++){
System.out.println(this.name+"---->Is Running");
}
}
}
public class ThreadDemo01{
public static void main(String[] args){
Runnable r1 = new MyThread1("线程A");
Runnable r2 = new MyThread1("线程B");
Runnable r3 = new MyThread1("线程C");
Runnable r4 = new MyThread1("线程D");
Thread t1 = new Thread (r1);
Thread t2 = new Thread (r2);
Thread t3 = new Thread (r3);
Thread t4 = new Thread (r4);
t1.start();
t2.start();
t3.start();
t4.start();
//也可以这样写
/* MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
MyThread mt3 = new MyThread("线程C");
MyThread mt4 = new MyThread("线程D");
mt1.start();
//同一线程不能连续启动,编译没错误,但运行错误
mt2.start();
mt3.start();
mt4.start();*/
}
}
0.0!!运行结果好长,就不截图了哈,可以自己试试。
实现Runnable接口的多线程(实现了共享资源):
class MyThread2 implements Runnable{
//定义十张票
private int ticket=10;
public void run(){
for(int i=0;i<500;i++){
if(this.ticket>0){
System.out.println("卖票-------"+(this.ticket--));
}
}
}
}
public class ThreadDemo02 {
public static void main(String[] args){
MyThread2 mt =new MyThread2();
//共享同一资源
Thread mt1 = new Thread(mt);
Thread mt2 = new Thread(mt);
Thread mt3 = new Thread(mt);
mt1.start();
mt2.start();
mt3.start();
}
}
运行结果:
分享到:
相关推荐
本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...
在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...
在给定的代码中,使用了两种方法实现多线程文件复制: 1. 使用CFile类复制文件 在第一个代码块中,使用CFile类复制文件。CFile类提供了Read和Write方法,用于读取和写入文件。通过使用多个线程,每个线程负责复制...
易语言作为一款中国本土的编程环境,它提供了丰富的语法支持来实现多线程。本篇文章将深入探讨如何在易语言中通过两种不同的方法传递文本参数到线程中。 ### 方法一:使用线程创建时传递参数 易语言中,我们可以...
Java中有两种实现多线程的... Java代码 Java中有两种实现多线程的方式以及两种方式之间的区别 Java中有两种实现多线程的方式以及两种方式之间的区别 classThreadTestextendsThread{ privateintticket=100; publi
在Qt框架中,多线程的应用是常见的性能优化手段,特别是在UI更新和后台处理分离时。本主题将详细探讨如何使用Qt的QThread类来创建和管理线程,并且安全地结束线程,同时结合QMutex进行线程同步,以及如何实现Qt的...
通过上述两种方法,开发者可以在VB6环境中轻松地实现多线程程序。使用API函数可以实现更复杂的多线程逻辑,而使用Timer控件则更适合处理较为简单的并发任务。无论采用哪种方法,都需要注意程序的稳定性和安全性,以...
在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...
本示例通过"thread.pbl"和"testthread.pbl"两个对象,展示了如何在PB中实现多线程。 首先,我们需要了解PowerBuilder中的线程基础。在PB中,线程是通过创建`Systhread`对象来实现的。`Systhread`是PB提供的系统级...
下面,我们将深入探讨如何在VB中实现多线程,以及这一技术的重要性和应用。 1. **线程基础概念** - **线程**:线程是程序执行的基本单元,每个进程至少包含一个线程。线程共享同一进程的内存空间,但拥有独立的...
这两种方法各有优缺点。继承`Thread`类的方法简洁明了,但在Java中不建议过度使用继承,尤其是为了实现多线程的目的。相比之下,实现`Runnable`接口的方式更加灵活,适用于大多数情况,特别是当一个类已经继承了另一...
易语言多线程传递文本参数是开发中常常遇到的问题,下面将详细介绍两种常见的方法。 **方法一:使用全局变量** 易语言中,全局变量可以在程序的不同线程间共享数据,因此可以用来传递参数。这种方式简单直接,但...
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...
在VC++中实现多线程排序,我们可以利用C++标准库中的`<thread>`头文件,创建多个线程来同时执行不同的排序任务。每个线程负责一部分数据的排序,通过线程间的同步(如互斥量、条件变量等)确保在合并结果时的正确性...
多线程编程作为一种提高程序并发性和性能的技术,尤其在并行处理领域展现出巨大潜力。在并行处理中,多线程能够充分利用现代多核处理器的能力,通过同时执行多个线程来加速计算过程。本文旨在探讨如何在递归算法中...
标题中的“VB6用winsock实现多线程客户端登录与短信发送”指的是使用Visual Basic 6(VB6)编程语言,结合Winsock控件来构建一个支持多线程的客户端应用,该应用能够进行登录操作并能发送短信。Winsock是Windows上...
实现多线程的方式有多种,例如在一个servlet中全局保存请求,然后由单例servlet处理,或者将请求放入队列,由单线程调度处理。 用户级线程(User-Level Threads, ULTs)是由应用程序或线程库负责管理和调度的线程,...
在Visual Basic Script(VBS)中实现多线程并非易事,因为VBS本身并不直接支持多线程机制。然而,在某些情况下,我们可能需要让脚本同时执行多个任务,以提高效率或解决特定问题。本文将详细介绍几种在VBS中模拟多...
在本资源中,"多线程实现的五种不同排序"提供了VC++(Visual C++)源码,这对于学习多线程编程以及数据结构排序的初学者来说是一个很好的实践材料。下面将详细介绍这五个不同的排序算法及其在多线程环境下的实现。 ...
这两种方法都是为了在Java程序中创建并管理多个并发执行的任务,从而提高程序的执行效率。 1. 继承Thread类: 当一个类直接继承Thread类时,可以通过重写`run()`方法来定义线程的行为。在示例代码中,`hello`类继承...