一、定义线程
1、扩展java.lang.Thread类。
此类中有个run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的 Runnable
运行对象构造的,则调用该 Runnable
对象的 run
方法;否则,该方法不执行任何操作并返回。
Thread
的子类应该重写该方法。
2、实现java.lang.Runnable接口。
void run()
使用实现接口 Runnable
的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run
方法。
方法 run
的常规协定是,它可能执行任何所需的操作。
二、实例化线程
1、如果是扩展java.lang.Thread类的线程,则直接new即可。
2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
三、启动线程
在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。
在调用start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标run()方法将运行。
注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。
四、例子
package thread_test;
/**
* 测试Runnable类实现的多线程程序
*
* @author ciding
* @createTime Dec 7, 2011 9:38:52 AM
*
*/
public class TestRunnable {
public static void main(String[] args) {
StrRunnable sr1 = new StrRunnable("chenfengbin");
StrRunnable sr2 = new StrRunnable("cidng");
Thread t1 = new Thread(sr1);
Thread t2 = new Thread(sr2);
t1.start();
t2.start();
StrThread st1 = new StrThread("chenfengbin");
StrThread st2 = new StrThread("cidng");
Thread t3 = new Thread(st1);
Thread t4 = new Thread(st2);
t3.start();
t4.start();
}
}
/**
* 通过实现接口的多线程
*
* @author ciding
* @createTime Dec 8, 2011 10:20:28 PM
*
*/
class StrRunnable implements Runnable {
private String name;
public StrRunnable(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 3; i++) {
for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。
System.out.println("Runnable下的" + name + ": " + i);
}
}
}
/**
* 通过继承类的多线程
*
* @author ciding
* @createTime Dec 8, 2011 10:20:50 PM
*
*/
class StrThread extends Thread{
private String name;
public StrThread(String name){
this.name = name;
}
public void run() {
for (int i = 0; i < 3; i++) {
for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。
System.out.println("Thread下的" + name + ": " + i);
}
}
}
运行结果:
Runnable下的chenfengbin: 0
Runnable下的cidng: 0
Thread下的chenfengbin: 0
Thread下的cidng: 0
Runnable下的chenfengbin: 1
Runnable下的cidng: 1
Thread下的chenfengbin: 1
Thread下的cidng: 1
Runnable下的chenfengbin: 2
Thread下的chenfengbin: 2
Runnable下的cidng: 2
Thread下的cidng: 2
思考问题:
1,直接调用run()方法,与一般程序有区别吗?会启动一个新的线程吗?那启动一个新线程是怎么运做的呢。
2,线程有名字吗?
3,线程是怎么调度的呢?我们是不是影响线程调度的方式。
4,线程有哪些运行状态?
5,线程都有哪些常见方法?
是的,这些问题将在后面的环节一一解答。
分享到:
相关推荐
本文将详细介绍如何使用mongoose库创建一个支持多线程的HTTP服务器,并探讨相关技术要点。 **mongoose库介绍** mongoose是一个轻量级的C语言库,用于构建嵌入式Web服务器。它具有易于使用的API,支持多种HTTP特性...
Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...
2. **共享资源**:在多线程环境中,多个线程可能需要访问同一个数据或对象,这就形成了共享资源。 3. **竞态条件**:当两个或多个线程同时访问并修改共享资源时,如果没有适当的同步措施,可能导致数据的不一致性,...
异步调用是在多线程环境中实现的,其中一个线程(通常是主线程)发起一个请求,然后立即返回,无需等待该请求的结果。这使得调用者可以继续执行其他任务,而不会被阻塞。在Java中,`Future`和`ExecutorService`可以...
VB多线程控件是开发者用来实现这一功能的一种工具,但正如标题和描述所指出的,虽然可以实现简单的多线程,但确实存在一些限制和挑战。 首先,我们要理解什么是线程。线程是程序执行的基本单元,每个线程都有自己的...
本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...
### Visual Basic 6.0 建立...使用API函数可以实现更复杂的多线程逻辑,而使用Timer控件则更适合处理较为简单的并发任务。无论采用哪种方法,都需要注意程序的稳定性和安全性,以确保多线程程序能够正确且高效地运行。
这里提供一个简单的PB.NET多线程示例: ```csharp using System.Threading; public class MyThreadClass { public void RunTask() { // 在这里执行你的任务 } } public class Program { static void Main...
通过上述步骤,我们可以实现一个高效的多线程文件下载器。这个过程涉及到的知识点包括:线程与线程池、异步编程、文件I/O、HTTP范围请求、异常处理和进度更新。这些知识对于任何希望深入理解C#并发编程和网络编程的...
1. **多线程**:多线程是指在一个程序中可以同时执行多个独立的线程。在Web服务器中,多线程技术用于处理并发请求,使得服务器能够同时服务于多个客户端,提高资源利用率和响应效率。Java语言提供了丰富的多线程API...
本项目涉及的是如何在C++中实现一个支持多线程写入的日志系统。下面将详细介绍这个主题,并围绕“C++”、“日志”和“多线程”这三个关键标签展开讨论。 首先,C++是一种通用的、面向对象的编程语言,它提供了丰富...
通过这个项目,初学者可以学习到如何创建Socket连接,使用多线程进行并发处理,以及如何设计和实现简单的用户交互界面。对于想要提升自己网络编程能力的开发者来说,这是一个非常有价值的实践案例。同时,代码中的...
本篇文章将详细讲解一个在Delphi中实现的最简单的多线程例子,帮助你理解如何在实践中应用多线程。 首先,让我们分析一下提供的文件列表: 1. `ThSort.dcu` 和 `SortThds.dcu`:这些是编译后的单元文件,包含了源...
在C++编程中,多线程是一种常见...总之,本“C++多线程 最简易的多线程程序”是一个基础的多线程实现,适合初学者学习和实践。通过理解和应用上述知识点,你可以开始构建更复杂的多线程应用程序,以解决更实际的问题。
Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...
例如,你可以这样创建一个简单的线程: ```pb class CustomThread extends Systhread { public function CustomThread() { super(); } override function Run() { // 在这里编写线程要执行的代码 while ...
我们可以在多线程环境中设计一个定时任务,比如使用TTimer组件(尽管它不是线程,但可以在适当的时间触发事件),在特定时间点检查日志文件大小,当达到阈值时,创建新的日志文件或删除旧的日志。同时,为了保持日志...
【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...
【基于Qt实现的多线程客户端与服务器】项目是一个典型的分布式系统应用,它结合了Qt库、C++编程语言和多线程技术,用于构建一个高速公路智能收费系统。在这个系统中,多线程技术被用来提升程序的并发处理能力,确保...
以下是一个简单的Java线程示例: ```java public class MyThread extends Thread { public void run() { // 线程执行的代码 } public static void main(String[] args) { MyThread thread = new MyThread(); ...