- 浏览: 597431 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (154)
- java (31)
- Struts (3)
- Hibernate (8)
- Spring (6)
- JS (14)
- DWR (1)
- Oracle (1)
- SQL Server (0)
- JSF (0)
- JPA (0)
- Grails (3)
- Ajax (1)
- Extjs (0)
- jQuery (4)
- MySQL (2)
- 正则表达式 (2)
- 其他 (6)
- 计算机应用 (7)
- Groovy (8)
- Google (1)
- Web (2)
- MongoDB Java Driver (1)
- mongodb (1)
- Linux (3)
- HTML (1)
- Tomcat (3)
- Eclipse (2)
- JSP (1)
- 缓存 (1)
- 动态 (1)
- 问题与解决 (3)
- HY (1)
- Android (35)
- LBS (1)
最新评论
-
u012136165:
list 方法:纠正:[2,5].add(1,9) ...
Groovy的list和map -
bruce.yuan:
误人子弟的文章。已经看到N个人转了这个帖子,这要贻害多少新人啊 ...
理解并解决GBK转UTF-8奇数中文乱码 -
思念-悲伤:
特意登录上来,感谢下!
理解String的compareTo()方法返回值 -
bo_hai:
总结的好,有效。
理解String的compareTo()方法返回值 -
u012678420:
在onCreate方法中获取某个View的宽度和高度
进程:表示一个任务。
线程:一种比进程更小的执行单位,依附在进程中,多个线程共享一个进程的资源。
假设有一项任务是修建一条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;
}
线程:一种比进程更小的执行单位,依附在进程中,多个线程共享一个进程的资源。
假设有一项任务是修建一条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;
}
发表评论
-
理解并解决GBK转UTF-8奇数中文乱码
2011-06-18 21:29 27225最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK ... -
Java创建对象的四种方法
2010-12-24 15:10 1264package test; import java ... -
文件上传
2010-12-16 09:42 1094我用Excel数据导入来说明文件上传问题 <form ... -
GBK编码转成UTF-8编码
2010-12-03 15:49 1521从GBK编码转成UTF-8编码 private String ... -
HttpClient请求
2010-11-24 18:22 1626一个apache的httpclient简单范本,常用在WebS ... -
接收任意个字符串的方法
2010-11-10 11:32 1139public class MutilStringParamsD ... -
有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别(转)
2010-09-26 10:01 1921Session Bean:分有状态 ... -
ThreadLocal解决线程安全问题
2010-09-25 16:55 3310//以下代码存在问题 pub ... -
AOP之Hello World
2010-09-14 23:41 1144目标 package com.aop.joinpoint; ... -
理解Socket
2010-09-03 00:31 1301服务器端代码: import java.io.Buffered ... -
理解TreeSet.add()方法
2010-08-31 17:35 3301Set存放不同元素,TreeSet存放不同元素,并且对元素进行 ... -
一道Java面试题
2010-08-25 15:40 1326有两组字符串,A组["A","B ... -
理解+=操作符
2010-08-23 14:52 993今天看到一篇文章(下面给出原文链接),对作者的错误理解予以纠正 ... -
更深入地理解自增自减运算符
2010-08-20 17:27 1192public class DeepTest { public ... -
理解重载与重写
2010-08-20 15:51 1117今天有个朋友问我重载与覆盖的区别,所以我就写好了发给他。在这贴 ... -
暴露属性不安全?
2010-08-17 20:19 1245我们在看书的时候常常看到书上说暴露属性不安全,那么请问下哪里不 ... -
理解继承
2010-08-10 11:52 993这个例子涉及到继承与 ... -
获取properties配置文件信息
2010-08-10 11:32 1731import java.io.IOException; imp ... -
中文字符按拼音排序
2010-06-01 13:12 1647java.util.Comparator cmp = java ... -
了解枚举
2010-05-23 19:05 1540为了了解枚举,先利用反射分析一下它 import java.l ...
相关推荐
Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核处理器和高并发应用中,理解并熟练掌握线程并发技术对于提升程序性能至关重要。在Java中,线程并发可以通过多种方式实现,包括继承Thread类、实现Runnable...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
"基于Qt的多线程并发服务器"是一个典型的解决方案,它利用了Qt库的强大功能,特别是其对多线程的支持,来处理来自多个客户端的并发请求。下面我们将深入探讨这个主题。 首先,Qt是一个跨平台的应用程序开发框架,...
标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...
在编程领域,多线程并发处理是一种常见的优化技术,它能充分利用多核处理器的资源,提高程序的执行效率。在给定的标题“多线程并发处理的简单实现”中,我们可以深入探讨如何构建这样的系统。 首先,多线程并发处理...
在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...
在处理大量图像或需要快速响应时间的应用场景中,多线程并发识别可以显著提升效率。以下将详细介绍如何利用Tesseract OCR实现多线程并发识别,以及可能涉及的相关技术点。 首先,理解Tesseract OCR的基本工作原理是...
在IT行业中,模拟摄像头与多线程并发处理是两个重要的技术领域,特别是在视频通信和网络编程中。本文将深入探讨“模拟摄像头libuv支持多线程并发”这一主题,结合“模拟IPC”这一标签,以及文件名称“IpcSimulate”...
线程并发的使用可以显著提升程序处理能力,例如在服务器端处理大量用户请求时,如果每个请求都由单独的线程处理,那么处理速度将大大提高。但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决...
"Linux下基于socket多线程并发通信的实现" 本文主要探讨Linux操作系统下基于socket多线程并发通信的实现。 socket是UNIX系统开发中的网络通信接口,可以对台计算机之间的通信规范进行合理定义,从而达到通信的目的...
### Java多线程并发知识点详解 #### 一、Java多线程并发简介 在现代软件开发中,特别是在Java这样的主流编程语言中,多线程并发技术是提高程序执行效率、优化资源利用的关键手段之一。本篇文章将深入探讨Java中的...
在IT行业中,多线程并发处理数据是一种常见的优化策略,特别是在大数据处理、网络服务和分布式系统中。通过并发,可以充分利用多核处理器的计算能力,提高程序执行效率,缩短任务的总体完成时间。本篇文章将深入探讨...
在Linux操作系统中,多线程并发控制是一个至关重要的主题,特别是在设备驱动编程和系统级开发中。本文将深入探讨Linux下并发控制的原因、方法以及具体的实现机制。 并发控制的主要原因是由于多个线程可能同时访问...
"支持多线程并发与消息异步处理的Linux Netlink通信机制研究" Linux操作系统中,Netlink是一种流行的进程间通信机制,用于实现用户空间和内核空间之间的通信。然而,在多线程程序中使用Netlink时,仍然存在一些问题...
在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...
在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...
本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...
多线程并发从,学习笔记,代码+注释,从线程创建开始到多线程并发,相关锁以及一些设计模式等
java多线程并发编程知识导图笔记.xmind
该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...