`

实现多线程的方式

阅读更多
实现多线程有2种方法

1.继承自Thread类,可以重写run()方法去覆盖去Thread中的run()方法

package thread;

import java.util.Date;

public class TestThreads extends Thread{

public int time;
public String user;

public TestThreads(int time,String user){
this.time=time;
this.user=user;
}

public void run(){
while(true){
try{
System.out.println(user+"休息"+time+"ms-"+new Date());
Thread.sleep(time);
}catch(Exception ee){
System.out.println(ee);
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t1=new TestThreads(10000,"jack");

Thread t2=new TestThreads(20000,"Mike");


t1.start();
t2.start();

//t1.setPriority(1);
//t2.setPriority(Thread.MAX_PRIORITY);//得到cpu执行的机会要大一点
}

}
2.实现Runnable接口并实现它的run()方法

package thread;

import java.util.Date;

public class TestRunnable implements Runnable {

public int time;
public String user;

public TestRunnable(int time,String user){
this.time=time;
this.user=user;
}

public void run(){
while(true){
try{
System.out.println(user+"休息"+time+"ms-"+new Date());
Thread.sleep(time);
}catch(Exception ee){
System.out.println(ee);
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t1=new Thread(new TestRunnable(1000,"jack"));

Thread t2=new Thread(new TestRunnable(3000,"Mike"));


t1.start();
t2.start();

//t1.setPriority(1);
//t2.setPriority(Thread.MAX_PRIORITY);//得到cpu执行的机会要大一点
}

}

注:通过设置setPriority来设置调用线程对象的优先级

其中多线程之间是“并行交替”执行的,通过获取时间片来执行
如:
package thread;

public class TestThreadm extends Thread {

public int i;
/**
* @param args
*/
public TestThreadm(int i){
this.i=i;
}
public void run(){
for(int j=0;j<100;j++){
System.out.println("user"+i+"运行"+j);
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
for(int m=0;m<5;m++){
new TestThreadm(m).start();
}

}

}
运行截取其中一小片
user0运行65
user0运行66
user0运行67
user0运行68
user0运行69
user0运行70
user0运行71
user4运行0
user4运行1
user4运行2
user4运行3
user4运行4
user4运行5
user4运行6
user4运行7
发现是交替执行的
注:如果设置优先级(可以控制执行的次序)那么优先级高的优先执行,且可以分派的cpu执行时间就多点(先执行),相反就少点(后执行)。你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

但是线程的优先级代表该线程的重要程度(不是绝对的),当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。
分享到:
评论

相关推荐

    用VC_实现多线程方式下的串行通信

    结合实际工程, 在VC+ + 环境下通过采用创建事件对象来保持线程同步、利用两个监听函 数提高数据接收效率和可靠性等措施实现了多线程串行通信, 完成了工程前端数据采集器与后台 计算机之间的数据传输。

    用VB6实现多线程

    本篇文章将深入探讨如何在VB6中实现多线程以及涉及的关键知识点。 首先,我们要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。在单线程程序中,所有操作都按顺序执行;而...

    VB 实现多线程

    ### VB 实现多线程详解 #### 一、引言 多线程编程技术在现代软件开发中扮演着至关重要的角色。它可以帮助开发者构建出更高效、响应更快的应用程序。尽管Visual Basic (VB) 被认为是一种面向对象且易于学习的语言,...

    PB多线程实现

    本文将详细探讨PB(包括PB9、PB12.5以及PB.NET)实现多线程的方法。 一、PB9的多线程实现 在PB9中,虽然官方并未直接支持多线程,但开发者可以通过使用Windows API函数来实现。一种常见的方式是创建一个新的窗口类...

    多线程两种实现方式Java

    `ThreadProject`可能是包含多个Java文件的项目,这些文件展示了如何通过上述两种方式实现多线程。你可以通过运行这些示例来更好地理解和学习Java多线程的概念。例如,它可能包含一个继承`Thread`的类,一个实现`...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...

    powerbuilder 实现多线程

    参考了http://blog.csdn.net/gaoqiangz/article/details/6682895以后,弄了这个演示程序,以更为简单的方式实现了多线程,主线程与子线程的双向通讯:启动子线程、查询子线程状态,中止了线程等。原理请参考上述博文...

    .Net下多线程的四种编程实现方式详解

    详细讲解了多线程的四种实现方式(Thread、线程池、Task、委托),以及各种实现方式的优缺点。相信对于想学习多线程的朋友是个不错的选择。

    c#编写串口通讯代码 多线程实现.rar_C#串口_c# 串口多线程_c#多线程_串口多线程_串口通信

    串口通信的实现,编程环境为C#,实现技术采用了多线程方式

    VB6用winsock实现多线程客户端登录与短信发送

    标题中的“VB6用winsock实现多线程客户端登录与短信发送”指的是使用Visual Basic 6(VB6)编程语言,结合Winsock控件来构建一个支持多线程的客户端应用,该应用能够进行登录操作并能发送短信。Winsock是Windows上...

    vc6.0下实现 多线程编程的实例

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境下进行多线程编程,并结合Socket通信实现一个简单的客户端-服务器应用。标题提及的"vc6.0下实现 多线程编程的实例"正是我们要讨论的核心内容,而描述...

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

    本文将详细介绍如何在VB6中实现多线程,并提供两种实用的方法来帮助开发者更好地理解和掌握多线程编程。 #### 二、多线程简介 多线程是指在单个进程中创建并运行多个独立执行单元的技术。每个线程可以并发执行不同...

    采用全局变量方式实现多线程的通信

    总的来说,全局变量在实现多线程通信时提供了一种简单但不总是最佳的途径。在实际开发中,我们需要根据项目需求和性能考虑,谨慎选择适合的线程同步和通信机制。MFC提供了丰富的工具和类来帮助我们处理这些问题,但...

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

    在VS2008环境下编译的这个项目,采用了一种特定的多线程实现方式。值得注意的是,mongoose 6.7及更高版本可能已经改变了多线程的实现方法,因此理解旧版代码对于升级或迁移至关重要。 **mongoose的多线程使用** 1....

    实现Runnable接口创建多线程.docx

    1. 克服了Java的单继承限制,允许类同时继承其他类和实现多个接口。 2. 提高了代码的复用性,因为`Runnable`对象可以被多个线程共享。 3. 更好的符合面向对象设计原则,因为线程任务(`Runnable`)与线程本身(`...

    stm32单片机多线程实例

    在STM32上实现多线程,通常会借助实时操作系统(RTOS)如RT-Thread。 RT-Thread是一个轻量级、开源的实时操作系统,它为STM32等微控制器提供了强大的多任务管理能力。通过创建和调度线程,RT-Thread使得开发者可以...

    VB实现真正的稳定多线程(含源码)

    通过分析提供的压缩包文件名称`vbThreadNew`,我们可以猜测这是一个包含VB多线程实现的源代码示例,可能提供了一种新的线程创建和管理方式,以提高稳定性和性能。学习和研究这个源码,可以帮助我们更好地理解和实践...

    Shell 脚本实现多线程的代码

    在标题"Shell 脚本实现多线程的代码"中,我们关注的重点是如何在Shell脚本中实现多线程操作,这通常是为了提高程序的执行效率,让多个任务可以同时运行。 描述中提到的是一个具体的实现案例,即用Shell脚本来创建并...

    Android多线程文件上传

    三、实现多线程上传 1. 使用AsyncTask:Android提供了一个内置的异步任务类AsyncTask,它可以轻松地在后台线程执行任务并在UI线程更新结果。不过,由于AsyncTask的限制(如线程池大小),对于大量并发任务,可能不是...

    Halcon12+VisualStudio2013实现多线程

    本文将深入探讨如何在Halcon12中结合Visual Studio 2013实现多线程技术,这对于提升图像处理速度和优化资源利用率至关重要。 首先,多线程是现代软件开发中的一个重要概念,它允许程序在同一时间执行多个独立的任务...

Global site tag (gtag.js) - Google Analytics