`

多线程知识2开启线程最基本的两种方法

阅读更多
实现多线程常见的两种方式

1、通过继承Thread类来实现

class MyThread extends Thread {

	public void run() {
		System.out.println("当前" + Thread.currentThread().getName() + "正在执行任务");
	}
}

public class Test {

	public static void main(String[] args) {
		Thread t1 = new MyThread();
		t1.setName("A线程");
		t1.start();
		Thread t2 = new MyThread();
		t2.setName("B线程");
		t2.start();
	}
}
运行结果:
当前B线程正在执行任务
当前A线程正在执行任务

  注意:多次运行你会发现显示的结果每次都会有变动而且和我们预测的结果不一样,这是由于CPU在执行时,分配任务一般属于抢占式,那个线程先抢到先执行。如果让看到的现象更直观,可以在run方法使用循环

2、通过实现Runnable接口实现

public class Test2 {

	public static void main(String[] args) {
		Runnable r = new MyThread2();
		Thread t1 = new Thread(r);
		t1.setName("A线程");
		t1.start();
		
		Thread t2 = new Thread(r);
		t2.setName("B线程");
		t2.start();
	}
}

class MyThread2 implements Runnable {

	public void run() {
		System.out.println("当前" + Thread.currentThread().getName() + "正在执行任务");
	}
}

 

程序运行结果:(每次都会变同上)
当前B线程正在执行任务
当前A线程正在执行任务

 3、通过上面两个小程序的运行结果发现,无论那种方式实现多线程,都要去重写run()方法,开启线程都是通过start()方法,执行start()方法后就会执行到run()方法,run方法就是线程执行任务的入口,但是要注意一点,调用了start()方法不一定就会立即去执行run方法,因为多线程运行时本身就是抢占式的,每个线程之间也有优先级等区别。感兴趣的同学可以去看下API文档,你会发现两者实质相似,Thread类也实现的 Runnable接口。

4、两种开启线程的比较
a)第一种开启线程代码要简洁些
b)通过接口开启线程可以避免单继承
c)通过接口开启线程可以实现多个线程共享一个资源
使用原则:能使用接口尽量使用接口

 

分享到:
评论

相关推荐

    多线程demo程序-轻松掌握多线程技术

    2. **开启线程**: 创建线程后,需要通过调用Thread类的start()方法来启动线程。start()方法会调用run()方法,但并不是立即执行,而是将线程放入就绪队列等待CPU调度。一旦获得执行权,run()方法中的代码就会在新的...

    经典java多线程资料

    ### 经典Java多线程资料知识点解析 #### 一、基本原理 ...以上内容涵盖了关于Java多线程的基本概念、线程的创建与启动方式以及线程的生命周期等方面的知识点,希望能对学习Java多线程技术的朋友有所帮助。

    多线程编程的入门指导(英文版)

    在本文中,我们将深入探讨多线程编程的基础知识,帮助初学者理解这一重要的编程概念。 首先,理解线程的基本概念至关重要。线程是操作系统分配处理器时间的基本单元,每个线程都有自己的程序计数器、寄存器和栈空间...

    Qt5.12.9多线程双缓冲串口类使用

    它支持C++和QML两种编程语言,并且提供了丰富的API供开发者使用,包括对多线程和串口通信的支持。 **多线程**在现代软件开发中至关重要,尤其是在处理I/O密集型任务如串口通信时。在Qt中,我们可以使用`QThread`类...

    VC socket多线程文件传输

    2. **多线程编程**:在VC中,可以使用`<thread>`库或者Win32 API如`CreateThread`来创建和管理线程。多线程用于并发处理任务,提高程序执行效率。在文件传输中,每个线程可能负责一个特定部分的文件数据传输,从而...

    C#多线程解决界面卡死问题的完美解决方案

    在C#编程中,多线程技术是一种关键的性能优化手段,尤其对于处理耗时操作时,能够确保用户界面(UI)的响应性,避免出现界面卡死的现象。本解决方案将深入探讨如何利用C#的多线程特性来解决这个问题。 一、线程基础...

    c#多线程文件传输工具

    Socket是网络编程的基本元素,它为两台计算机之间的通信提供了一种标准接口。在C#中,我们通常使用System.Net命名空间下的Socket类来创建和管理socket。服务器端会创建一个监听socket,等待客户端的连接请求,一旦...

    java线程知识点总结[归类].pdf

    Java 线程知识点总结 Java 线程是一种轻量级的进程...本文总结了 Java 线程的基本概念、创建线程的方式、多线程的运行特性、五种线程状态、同步机制和线程间通讯等知识点,为读者提供了一个系统的 Java 线程知识框架。

    多线程全双工命名管道实现进程通信

    标题中的“多线程全双工命名管道实现进程通信”是指在编程中使用多线程技术结合命名管道来实现不同进程间的双向通信。这是一种高效、可靠的数据交换方式,尤其适用于在同一台计算机上运行的多个程序之间。 命名管道...

    串口通信多线程接收数据,发送数据

    总的来说,这个项目涉及到了串口通信的核心技术,包括多线程编程、串口参数设置、数据读写和线程同步,这些都是软件开发者在处理串口通信时需要掌握的关键知识点。通过分析这些文件,我们可以逐步构建出一个功能完善...

    多线程UDP通讯程序源代码

    2. **多线程编程**: 在多线程编程中,多个线程可以同时运行在同一进程内,提高程序的并发性和效率。在多线程UDP通信程序中,每个线程可能负责不同的任务,例如监听、接收、处理或发送数据。 - **线程的创建**:...

    java写的多线程下载程序源码

    在这一程序中,主要涉及到了Java的多线程处理和网络编程两大核心知识点。 首先,让我们深入理解Java的多线程。Java提供了丰富的多线程支持,通过创建Thread类的实例或者实现Runnable接口来开启新的执行线程。在本...

    C#Socket多线程聊天室

    1. **Socket编程**: Socket是网络通信中的基本组件,它提供了一种进程间的通信机制,允许两个网络连接上的应用程序进行数据交换。在C#中,`System.Net.Sockets.Socket`类是实现Socket通信的核心。 2. **TCP/IP协议*...

    c# Sokect多线程编程、UDP方式

    在UDP多线程编程中,服务器通常会开启一个线程来监听特定端口,当接收到数据时,会启动新的线程来处理接收到的数据,以避免单一线程处理多个请求时阻塞。`ClientTest`可能是实现UDP客户端的项目,它会创建`UdpClient...

    socket多线程文件上传下载实例

    在Java编程中,Socket通信是实现网络数据传输的基础,它为两台计算机之间提供了一种可靠的连接。在处理大量并发请求时,多线程技术能够有效地提升程序性能,尤其是在文件上传下载这种耗时操作中。本实例将探讨如何...

    duoxianchengxiazai.rar_Java 多线程 下载_java 多线程下载

    Java 多线程下载是一种常见的优化网络下载性能的技术,它通过开启多个下载线程来并发地请求文件的不同部分,从而提高文件下载的速度。在标题"duoxianchengxiazai.rar_Java 多线程 下载_java 多线程下载"中,我们可以...

    dotNetFramework多线程编程

    多线程环境下可能出现死锁(两个或更多线程相互等待对方释放资源)、活锁(线程不断重试导致无法前进)等问题,需要通过设计良好的同步机制和避免循环等待来预防。 九、线程安全 开发多线程应用时,必须确保数据...

    多线程面试题1

    在 GCD 中,有两种队列类型: - **串行队列**:一次仅执行一个任务,确保任务顺序执行,不会开启多个线程,除非队列是主队列。 - **并发队列**:允许多个任务并发执行,可以开启多个线程,但在异步执行时才有并发...

    史上最全 Java 多线程面试题及答案.zip

    2. **线程的创建方式**:Java提供了两种创建线程的方式:继承Thread类并重写run()方法,或者实现Runnable接口并实现run()方法,然后通过Thread对象启动。 3. **线程的生命周期**:包括新建、就绪、运行、阻塞和死亡...

Global site tag (gtag.js) - Google Analytics