有三种:
(1)继承Thread类,重写run函数
创建:
- <span style="font-size:12px;">class xx extends Thread{
- public void run(){
- Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
- }}</span>
开启线程:
对象.start() //启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
- <span style="font-size:12px;"> Thread t = new Thread(对象) //创建线程对象
- t.start()</span>
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果
Java Callable 代码示例:
- class TaskWithResult implements Callable<String> {
- private int id;
- public TaskWithResult(int id) {
- this.id = id;
- }
- @Override
- public String call() throws Exception {
- return "result of TaskWithResult " + id;
- }
- }
- public class CallableTest {
- public static void main(String[] args) throws InterruptedException,
- ExecutionException {
- ExecutorService exec = Executors.newCachedThreadPool();
- ArrayList<Future<String>> results = new ArrayList<Future<String>>(); //Future 相当于是用来存放Executor执行的结果的一种容器
- for (int i = 0; i < 10; i++) {
- results.add(exec.submit(new TaskWithResult(i)));
- }
- for (Future<String> fs : results) {
- if (fs.isDone()) {
- System.out.println(fs.get());
- } else {
- System.out.println("Future result is not yet complete");
- }
- }
- exec.shutdown();
- }
- }
运行结果:
result of TaskWithResult 0
result of TaskWithResult 1
result of TaskWithResult 2
result of TaskWithResult 3
result of TaskWithResult 4
result of TaskWithResult 5
result of TaskWithResult 6
result of TaskWithResult 7
result of TaskWithResult 8
result of TaskWithResult 9
相关推荐
在Java中,创建线程有几种常见的方式。第一种是通过继承Thread类并重写run方法来定义新的线程类。当创建此类的对象时,实际上就创建了一个新的线程。要启动线程,需要调用线程对象的start方法,这将让线程进入就绪...
在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。在提供的实例中,我们可能会看到这两种方式的运用。 1. 继承Thread类:通过创建新的Thread子类并重写其run()方法,然后创建该子类的实例并调用...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
在Java编程语言中,实现多线程文件传输是一种优化程序性能、提高系统资源...在提供的`java多线程文件传输`压缩包中,可能包含了实现这些概念的示例代码,通过分析和学习,可以更好地理解多线程文件传输的原理和实践。
在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
#### 二、Java多线程分页查询原理及实现 ##### 1. 分页查询基础概念 分页查询是指在查询数据时,将数据分成多个页面展示,而不是一次性返回所有数据。这种方式能够有效地减少单次查询的数据量,从而提高查询速度和...
创建一个新的线程通常有两种方式:一是继承`Thread`类并重写`run()`方法,二是实现`Runnable`接口并提供`run()`方法,然后将实现类的实例传给`Thread`类的构造函数。通过调用`start()`方法启动线程,它会自动调用`...
在Java多线程设计模式中,有几种常见的模式值得深入探讨: 1. 生产者消费者模式:通过阻塞队列实现生产者线程和消费者线程之间的数据交换,确保生产速度与消费速度的平衡,避免资源浪费。Java中的BlockingQueue接口...
Java 多线程的几种实现方法总结 Java 多线程是指在同一个程序中可以有多条执行线索同时执行,每个线程上都关联有要执行的代码,即可以有多段程序代码同时运行。为了帮助大家更好地理解和掌握 Java 多线程的知识,...
Java 多线程-Socket 编程是一种高效的网络编程方式,能够提高服务器端的并发处理能力和性能。但是,需要正确地使用 ExecutorService 和 Socket 库,并 consideration of线程安全问题和 Socket 连接的管理。
本项目通过Java多线程技术来实现这一目标,为初学者提供了一个良好的实践平台。 首先,理解多线程的概念至关重要。在单线程环境中,程序按照顺序执行任务,而在多线程环境中,多个任务可以同时运行,提高了计算机的...
Java多线程下载技术是Java开发中用于提升大文件下载效率的一种常见方法。在传统的单线程下载过程中,网络请求可能会因为各种原因中断,如网络波动、服务器问题或用户操作等,这会导致需要从头开始下载,浪费时间和...
总之,Java多线程提供了一种高效处理并发任务的手段。在实际开发中,我们需要根据需求选择合适的线程创建方式,并妥善处理线程同步和通信,确保程序的稳定性和正确性。通过分析和实践提供的Applet示例,我们可以深入...
这个压缩包中的文件提供了几个关于Java多线程交互的实例,可以帮助我们深入理解如何在并发环境中控制线程的同步,确保数据的一致性和安全性。 首先,让我们讨论一下标题和描述中提到的关键概念——“多线程交互”和...
本实验不仅实现了预期的功能,还提供了实践机会,帮助理解和掌握Java多线程编程的关键技术和注意事项。通过实验,我们可以更加深刻地理解多线程编程的优势与挑战,为后续学习高级并发编程打下坚实的基础。
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...
在"java多线程编程实例_Source"这个压缩包中,你可能会找到以上各种概念的实例代码,通过学习这些代码,你可以更深入地理解Java多线程的实现和应用,提高自己的编程能力。记得实践是最好的老师,尝试运行和修改这些...
Java多线程是Java编程中的核心概念,尤其在开发高性能、高并发的应用时,多线程技术显得尤为重要。本系列视频教程将深入讲解Java多线程的各个方面,帮助你掌握如何在Java环境中创建、管理以及优化多线程程序。 首先...