`

实现一个简单的多线程

    博客分类:
  • java
阅读更多
一、定义线程
 
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,线程都有哪些常见方法?
是的,这些问题将在后面的环节一一解答。
Java线程及线程池专题:http://ciding.iteye.com/admin/blogs/1300110
 
 
1
1
分享到:
评论

相关推荐

    基于mongoose实现Http Server(多线程)

    本文将详细介绍如何使用mongoose库创建一个支持多线程的HTTP服务器,并探讨相关技术要点。 **mongoose库介绍** mongoose是一个轻量级的C语言库,用于构建嵌入式Web服务器。它具有易于使用的API,支持多种HTTP特性...

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用

    Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用   目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...

    C#多线程互斥实例 多线程获取同一变量

    2. **共享资源**:在多线程环境中,多个线程可能需要访问同一个数据或对象,这就形成了共享资源。 3. **竞态条件**:当两个或多个线程同时访问并修改共享资源时,如果没有适当的同步措施,可能导致数据的不一致性,...

    Java多线程实现异步调用实例

    异步调用是在多线程环境中实现的,其中一个线程(通常是主线程)发起一个请求,然后立即返回,无需等待该请求的结果。这使得调用者可以继续执行其他任务,而不会被阻塞。在Java中,`Future`和`ExecutorService`可以...

    vb多线程控件能实现简单的多线程

    VB多线程控件是开发者用来实现这一功能的一种工具,但正如标题和描述所指出的,虽然可以实现简单的多线程,但确实存在一些限制和挑战。 首先,我们要理解什么是线程。线程是程序执行的基本单元,每个线程都有自己的...

    简单实现多线程同步示例(模拟购票系统)

    本示例“简单实现多线程同步示例(模拟购票系统)”旨在通过一个具体的实例,帮助开发者理解如何在Java中创建并管理多线程以及如何实现线程同步,确保数据的一致性和正确性。 首先,我们要明确多线程的基本概念。在...

    Visual Basic 6.0建立多线程程序就是这么简单

    ### Visual Basic 6.0 建立...使用API函数可以实现更复杂的多线程逻辑,而使用Timer控件则更适合处理较为简单的并发任务。无论采用哪种方法,都需要注意程序的稳定性和安全性,以确保多线程程序能够正确且高效地运行。

    PB多线程实现

    这里提供一个简单的PB.NET多线程示例: ```csharp using System.Threading; public class MyThreadClass { public void RunTask() { // 在这里执行你的任务 } } public class Program { static void Main...

    C#实现多线程下载文件

    通过上述步骤,我们可以实现一个高效的多线程文件下载器。这个过程涉及到的知识点包括:线程与线程池、异步编程、文件I/O、HTTP范围请求、异常处理和进度更新。这些知识对于任何希望深入理解C#并发编程和网络编程的...

    多线程Web服务器的设计与实现

    1. **多线程**:多线程是指在一个程序中可以同时执行多个独立的线程。在Web服务器中,多线程技术用于处理并发请求,使得服务器能够同时服务于多个客户端,提高资源利用率和响应效率。Java语言提供了丰富的多线程API...

    多线程实现的简单网络聊天程序,带注释

    通过这个项目,初学者可以学习到如何创建Socket连接,使用多线程进行并发处理,以及如何设计和实现简单的用户交互界面。对于想要提升自己网络编程能力的开发者来说,这是一个非常有价值的实践案例。同时,代码中的...

    Delphi中最简单的多线程例子

    本篇文章将详细讲解一个在Delphi中实现的最简单的多线程例子,帮助你理解如何在实践中应用多线程。 首先,让我们分析一下提供的文件列表: 1. `ThSort.dcu` 和 `SortThds.dcu`:这些是编译后的单元文件,包含了源...

    C++多线程 最简易的多线程程序

    在C++编程中,多线程是一种常见...总之,本“C++多线程 最简易的多线程程序”是一个基础的多线程实现,适合初学者学习和实践。通过理解和应用上述知识点,你可以开始构建更复杂的多线程应用程序,以解决更实际的问题。

    java socket 多线程 简易实现

    Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...

    Delphi中用多线程实现日志文件的读写与管理

    我们可以在多线程环境中设计一个定时任务,比如使用TTimer组件(尽管它不是线程,但可以在适当的时间触发事件),在特定时间点检查日志文件大小,当达到阈值时,创建新的日志文件或删除旧的日志。同时,为了保持日志...

    演示PB如何实现多线程

    例如,你可以这样创建一个简单的线程: ```pb class CustomThread extends Systhread { public function CustomThread() { super(); } override function Run() { // 在这里编写线程要执行的代码 while ...

    java多线程简单下载器

    【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...

    基于Qt实现的多线程客户端与服务器

    【基于Qt实现的多线程客户端与服务器】项目是一个典型的分布式系统应用,它结合了Qt库、C++编程语言和多线程技术,用于构建一个高速公路智能收费系统。在这个系统中,多线程技术被用来提升程序的并发处理能力,确保...

    java多线程模拟队列实现排队叫号

    同样,在`ServiceThread`中,我们可能使用`Object.wait()`和`Object.notify()`或者`Condition`来实现线程间的同步,确保每次只有一个客户正在接受服务。 ```java public class CustomerThread extends Thread { ...

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    以下是一个简单的Java线程示例: ```java public class MyThread extends Thread { public void run() { // 线程执行的代码 } public static void main(String[] args) { MyThread thread = new MyThread(); ...

Global site tag (gtag.js) - Google Analytics