`

线程并发

    博客分类:
  • java
阅读更多
进程:表示一个任务。
线程:一种比进程更小的执行单位,依附在进程中,多个线程共享一个进程的资源。

假设有一项任务是修建一条10公里的马路,需要费用100万元,给某建筑公司修建需要10个月,这可以看作是一个进程;然而我需要更快时间完成这项任务,于是我把这个任务分成子任务由10个建筑公司同时修建,每个公司10万元修建一公里,这可以看作是多个线程。

下面是个示例
public class MyThread implements Runnable {
private int flag = 0;
private static int count = 0;
private final int id = count++;

public MyThread(int flag) {
this.flag = flag;
}

public void run() {
System.out.println("MyThread with ID " + id + " and Flag is "+ flag);
}

public static void main(String[] args) {
for (int i=0; i<5; i++) {
new MyThread(i).run();
}
System.out.println("MyThread End");
}
}
/*
MyThread with ID 0 and Flag is 0
MyThread with ID 1 and Flag is 1
MyThread with ID 2 and Flag is 2
MyThread with ID 3 and Flag is 3
MyThread with ID 4 and Flag is 4
MyThread End
*/
上面示例没有使用多线程,仅仅是main线程顺序执行.

要使用多线程驱动,可以像下面这样(多线程之间不是顺序执行的,但每个线程仍是顺序执行)
public class MyThread implements Runnable {
private int flag = 0;
private static int count = 0;
private final int id = count++;

public MyThread(int flag) {
this.flag = flag;
}

public void run() {
System.out.println("MyThread with ID " + id + " and Flag is "+ flag);
}

public static void main(String[] args) {
for (int i=0; i<5; i++) {
new Thread(new MyThread(i)).start();
}
System.out.println("MyThread End");
}
}
/*
MyThread with ID 0 and Flag is 0
MyThread with ID 2 and Flag is 2
MyThread End
MyThread with ID 4 and Flag is 4
MyThread with ID 1 and Flag is 1
MyThread with ID 3 and Flag is 3
*/

我们可以使用java.util.concurrent包中的Executor类来管理线程
Executors.newCachedThreadPool()//创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们
Executors.newFixedThreadPool(int poolSize)//创建一个可重用固定线程数的线程池
Executors.newSingleThreadExecutor()//单一线程,就像是线程数量为1的FixedThreadPool
Executors.newScheduledThreadPool(int corePoolSize)//创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行

示例CachedThreadPool:
import java.util.concurrent.*;

public class MyThread implements Runnable {
private int flag = 0;
private static int count = 0;
private final int id = count++;

public MyThread(int flag) {
this.flag = flag;
}

public void run() {
System.out.println("MyThread with ID " + id + " and Flag is "+ flag);
}

public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i=0; i<5; i++) {
exec.execute(new MyThread(i));
}
exec.shutdown();
}
}
/*
MyThread with ID 0 and Flag is 0
MyThread with ID 1 and Flag is 1
MyThread with ID 3 and Flag is 3
MyThread with ID 2 and Flag is 2
MyThread with ID 4 and Flag is 4
*/

示例ScheduledThreadPool
import java.util.concurrent.*;

public class MyThread implements Runnable {
private int flag = 0;
private static int count = 0;
private final int id = count++;

public MyThread(int flag) {
this.flag = flag;
}

public void run() {
System.out.println("MyThread with ID " + id + " and Flag is "+ flag);
}

public static void main(String[] args) {
ExecutorService exec = Executors.newScheduledThreadPool(5);
try{
//设置延后5秒执行
exec.awaitTermination(5000,TimeUnit.MILLISECONDS );
}catch(InterruptedException e) {}
for (int i=0; i<5; i++) {
exec.execute(new MyThread(i));
}
exec.shutdown();
}
}
/*
MyThread with ID 0 and Flag is 0
MyThread with ID 1 and Flag is 1
MyThread with ID 2 and Flag is 2
MyThread with ID 4 and Flag is 4
MyThread with ID 3 and Flag is 3
*/
TimeUnit是枚举
public enum TimeUnit {
DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS;
}
分享到:
评论

相关推荐

    Java 模拟线程并发

    Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核处理器和高并发应用中,理解并熟练掌握线程并发技术对于提升程序性能至关重要。在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable...

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...

    基于Qt的多线程并发服务器

    "基于Qt的多线程并发服务器"是一个典型的解决方案,它利用了Qt库的强大功能,特别是其对多线程的支持,来处理来自多个客户端的并发请求。下面我们将深入探讨这个主题。 首先,Qt是一个跨平台的应用程序开发框架,...

    WEBAPI多线程并发测试工具

    标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...

    多线程并发处理的简单实现

    在编程领域,多线程并发处理是一种常见的优化技术,它能充分利用多核处理器的资源,提高程序的执行效率。在给定的标题“多线程并发处理的简单实现”中,我们可以深入探讨如何构建这样的系统。 首先,多线程并发处理...

    多线程并发技术

    在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...

    Tesseract OCR多线程并发识别案例

    在处理大量图像或需要快速响应时间的应用场景中,多线程并发识别可以显著提升效率。以下将详细介绍如何利用Tesseract OCR实现多线程并发识别,以及可能涉及的相关技术点。 首先,理解Tesseract OCR的基本工作原理是...

    模拟摄像头libuv支持多线程并发

    在IT行业中,模拟摄像头与多线程并发处理是两个重要的技术领域,特别是在视频通信和网络编程中。本文将深入探讨“模拟摄像头libuv支持多线程并发”这一主题,结合“模拟IPC”这一标签,以及文件名称“IpcSimulate”...

    JAVA多线程并发编程

    线程并发的使用可以显著提升程序处理能力,例如在服务器端处理大量用户请求时,如果每个请求都由单独的线程处理,那么处理速度将大大提高。但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决...

    Linux下基于socket多线程并发通信的实现.pdf

    "Linux下基于socket多线程并发通信的实现" 本文主要探讨Linux操作系统下基于socket多线程并发通信的实现。 socket是UNIX系统开发中的网络通信接口,可以对台计算机之间的通信规范进行合理定义,从而达到通信的目的...

    java多线程并发

    ### Java多线程并发知识点详解 #### 一、Java多线程并发简介 在现代软件开发中,特别是在Java这样的主流编程语言中,多线程并发技术是提高程序执行效率、优化资源利用的关键手段之一。本篇文章将深入探讨Java中的...

    多线程并发处理数据的问题

    在IT行业中,多线程并发处理数据是一种常见的优化策略,特别是在大数据处理、网络服务和分布式系统中。通过并发,可以充分利用多核处理器的计算能力,提高程序执行效率,缩短任务的总体完成时间。本篇文章将深入探讨...

    Linux课程设计 linux下多线程并发控制的机制分析

    在Linux操作系统中,多线程并发控制是一个至关重要的主题,特别是在设备驱动编程和系统级开发中。本文将深入探讨Linux下并发控制的原因、方法以及具体的实现机制。 并发控制的主要原因是由于多个线程可能同时访问...

    支持多线程并发与消息异步处理的Linux Netlink通信机制研究.pdf

    "支持多线程并发与消息异步处理的Linux Netlink通信机制研究" Linux操作系统中,Netlink是一种流行的进程间通信机制,用于实现用户空间和内核空间之间的通信。然而,在多线程程序中使用Netlink时,仍然存在一些问题...

    多线程并发服务器(毕业设计)

    在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...

    JDK5中的多线程并发库.doc

    在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...

    java socket 多线程并发控制 hibernate mysql

    本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...

    多线程并发和设计模式学习笔记(代码)

    多线程并发从,学习笔记,代码+注释,从线程创建开始到多线程并发,相关锁以及一些设计模式等

    java多线程并发编程知识导图笔记.xmind

    java多线程并发编程知识导图笔记.xmind

    多线程并发下的单例模式-源码

    该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...

Global site tag (gtag.js) - Google Analytics