- 浏览: 141840 次
- 性别:
- 来自: 深圳
文章分类
最新评论
package com.hbw.model;
public class User {
public User(){}
public User(int id,String name){
this.id=id;
this.name=name;
}
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hbw.dao;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.hbw.model.User;
public class UserDao {
private static int recordCount=899;
private int pageSize=100;
private int page=1;
private static List<User> list=Collections.synchronizedList(new ArrayList<User>());
static{
for (int i = 001; i <= recordCount; i++) {
User user=new User(i,"姓名:"+i);
list.add(user);
}
}
public List<User> getUserData(int pageSize, int page){
this.pageSize=pageSize;
this.page=page;
if(pageSize*(page+1)>list.size()){
return list.subList(page*100, list.size());
}else{
return list.subList(page*100, pageSize*(page+1));
}
}
public int getPageCount() {
return (recordCount == 0) ? 1 : ((recordCount % pageSize == 0) ? (recordCount / pageSize)
: (recordCount / pageSize) + 1);
}
public static void main(String[] args) {
UserDao dao=new UserDao();
List<User> list=dao.getUserData(100, 4);
for (User user : list) {
System.out.println(user.getId()+"____"+user.getName());
}
}
}
package com.hbw.thread;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import com.hbw.dao.UserDao;
import com.hbw.model.User;
public class ExecutorServiceDemo {
// 默认的并发级别
private final static int DEFAULT_CONCURRENCY_LEVEL = 5;
// 是否已经加载到最后一页
private volatile boolean isLastPage;
// 当前页
private AtomicInteger currentPage = new AtomicInteger(1);
// 总数
private static AtomicInteger count = new AtomicInteger(0);
private static ExecutorService executorService = Executors.newFixedThreadPool(DEFAULT_CONCURRENCY_LEVEL);
public static List<User> tempList= Collections.synchronizedList(new ArrayList<User>());
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(DEFAULT_CONCURRENCY_LEVEL);
long startTime=System.currentTimeMillis();
ExecutorServiceDemo test=new ExecutorServiceDemo();
test.getData(latch);
latch.await();
executorService.shutdown();
long endTime=System.currentTimeMillis(); //获取结束时间
System.err.println(tempList.size());
System.err.println("程序运行时间: "+((endTime-startTime)/1000)+"s:"+count.get());
}
public int getData(final CountDownLatch latch) throws InterruptedException{
final UserDao dao=new UserDao();
System.out.println(dao.getPageCount());
for(int i = 0; i < DEFAULT_CONCURRENCY_LEVEL; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
while(!isLoadLast()) {
int pageNum = currentPage.getAndIncrement();
if(pageNum > dao.getPageCount()) {
isLastPage = true;
continue ;
}
List<User> list=dao.getUserData(100,pageNum-1);
for (User u : list) {
System.out.println(u.getId()+"_____"+u.getName());
count.incrementAndGet();
tempList.add(u);
}
}
latch.countDown();
}
});
}
return count.get();
}
public boolean isLoadLast() {
return isLastPage;
}
}
public class User {
public User(){}
public User(int id,String name){
this.id=id;
this.name=name;
}
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hbw.dao;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.hbw.model.User;
public class UserDao {
private static int recordCount=899;
private int pageSize=100;
private int page=1;
private static List<User> list=Collections.synchronizedList(new ArrayList<User>());
static{
for (int i = 001; i <= recordCount; i++) {
User user=new User(i,"姓名:"+i);
list.add(user);
}
}
public List<User> getUserData(int pageSize, int page){
this.pageSize=pageSize;
this.page=page;
if(pageSize*(page+1)>list.size()){
return list.subList(page*100, list.size());
}else{
return list.subList(page*100, pageSize*(page+1));
}
}
public int getPageCount() {
return (recordCount == 0) ? 1 : ((recordCount % pageSize == 0) ? (recordCount / pageSize)
: (recordCount / pageSize) + 1);
}
public static void main(String[] args) {
UserDao dao=new UserDao();
List<User> list=dao.getUserData(100, 4);
for (User user : list) {
System.out.println(user.getId()+"____"+user.getName());
}
}
}
package com.hbw.thread;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import com.hbw.dao.UserDao;
import com.hbw.model.User;
public class ExecutorServiceDemo {
// 默认的并发级别
private final static int DEFAULT_CONCURRENCY_LEVEL = 5;
// 是否已经加载到最后一页
private volatile boolean isLastPage;
// 当前页
private AtomicInteger currentPage = new AtomicInteger(1);
// 总数
private static AtomicInteger count = new AtomicInteger(0);
private static ExecutorService executorService = Executors.newFixedThreadPool(DEFAULT_CONCURRENCY_LEVEL);
public static List<User> tempList= Collections.synchronizedList(new ArrayList<User>());
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(DEFAULT_CONCURRENCY_LEVEL);
long startTime=System.currentTimeMillis();
ExecutorServiceDemo test=new ExecutorServiceDemo();
test.getData(latch);
latch.await();
executorService.shutdown();
long endTime=System.currentTimeMillis(); //获取结束时间
System.err.println(tempList.size());
System.err.println("程序运行时间: "+((endTime-startTime)/1000)+"s:"+count.get());
}
public int getData(final CountDownLatch latch) throws InterruptedException{
final UserDao dao=new UserDao();
System.out.println(dao.getPageCount());
for(int i = 0; i < DEFAULT_CONCURRENCY_LEVEL; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
while(!isLoadLast()) {
int pageNum = currentPage.getAndIncrement();
if(pageNum > dao.getPageCount()) {
isLastPage = true;
continue ;
}
List<User> list=dao.getUserData(100,pageNum-1);
for (User u : list) {
System.out.println(u.getId()+"_____"+u.getName());
count.incrementAndGet();
tempList.add(u);
}
}
latch.countDown();
}
});
}
return count.get();
}
public boolean isLoadLast() {
return isLastPage;
}
}
- ThreadDemo.rar (116.2 KB)
- 下载次数: 0
发表评论
-
springcloud feign监听启动调用服务熔断问题处理
2018-04-24 17:33 1889spring cloud 版本:Edgware.SR2 ... -
CyclicBarrier的用法
2016-07-20 18:23 536本例介绍第三个同步装置:CyclicBarrier,它维护一个 ... -
深入浅出REST
2013-08-07 11:22 778不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“ ... -
log4j.properties配置详解(转载)
2013-07-11 10:23 741Log4J的配置文件(Configuration File ... -
java反射详解
2012-12-13 11:31 841本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ... -
关于could not find action or result
2012-12-04 15:27 933说说这两天遇到的关于could not find acti ... -
java项目几种常见数据库连接池的使用比较
2012-07-06 11:17 1021最原始的数据库使用就 ... -
java 常用7种数据库连接方式
2012-07-06 11:04 990MySQL: String Driver=&quo ... -
java数据源的几种配置
2012-07-03 16:06 1027几种常用的Java数据源解决方案 Java中的数据源就是ja ... -
Java Quartz自动调度
2012-06-19 16:02 891package com.test; import or ... -
Java正则表达式详解
2012-06-13 11:31 793一、正则表达式基础知 ... -
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '
2010-12-16 14:25 1915org.apache.commons.dbcp.SQLNest ...
相关推荐
在实际开发中,结合 `ExecutorService` 和 `Future`,我们可以构建更复杂的并发控制策略,以优化多线程程序的性能和可维护性。然而,也要注意,过度使用或不恰当使用同步工具可能导致死锁或性能下降,因此在设计并发...
2. **JAVA多线程API**:论文会详细阐述JAVA提供的多线程API,如Thread类、Runnable接口、ExecutorService和Future接口等。通过实例解析这些类和接口的使用方法,帮助读者理解如何在实际编程中创建和管理线程。 3. *...
在IT行业中,多线程是Java编程中一个重要的高级特性,尤其对于开发高效能和响应迅速的应用至关重要。这个“多线程终极案例程序”旨在帮助Java开发者深化对多线程的理解,通过一个具体的“多兵种联合攻击防御塔”游戏...
9. **并发工具类**:`CountDownLatch`、`CyclicBarrier`和`Semaphore`等并发工具类可以帮助控制线程的启动和同步,提高多线程操作的协调性。 10. **安全性**:在多线程环境下,文件操作需注意文件锁,避免同一时刻...
线程池管理和多线程上传是并发编程中的一个重要实践,特别是在大数据传输和网络服务中。在Java等编程语言中,线程池通过有效地管理和复用线程资源,避免了频繁创建和销毁线程带来的开销,提升了系统性能。下面将详细...
Java多线程详解 在Java编程中,多线程是一种重要的技术,它使得程序能够同时执行多个任务,提高系统的效率和响应性。本教程将详细讲解Java中的多线程概念,包括线程的创建、状态、同步以及高级主题,旨在帮助初学者...
- **CountDownLatch**:常用于多线程间的同步,计数器从正整数开始,每当一个线程完成任务,计数器减一,当计数器为零时,所有等待的线程将被释放。 - **CyclicBarrier**:允许一组线程等待彼此到达某个屏障点,...
在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关重要。下面将详细解释这两个概念及其在Java中的实现和应用。 多线程是指在一个应用程序中同时运行多个独立的执行...
在实际应用中,`CountDownLatch`常用于分布式系统、多线程协作、测试场景等,例如等待所有客户端连接完成、确保所有数据加载完毕后再开始服务等。 总结一下`CountDownLatch`的主要知识点: 1. `CountDownLatch`是...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...
"多线程.pdf"很可能包含更详细的理论解释和案例分析,可能涵盖了线程优先级、线程生命周期(新建、就绪、运行、阻塞、死亡)、线程安全的数据结构(如ConcurrentHashMap)以及高级特性如线程局部变量(ThreadLocal)...
为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...
此外,Java还提供了并发工具类,如`java.util.concurrent`包下的`ExecutorService`、`Semaphore`、`CountDownLatch`等,这些工具可以帮助开发者更高效地管理和协调线程,提高并发性能。 总之,Java的多线程和并发...
此外,java.util.concurrent包提供了一系列高级的线程池和并发工具,如ExecutorService,Semaphore,CountDownLatch,CyclicBarrier等,这些工具可以更方便、高效地管理多线程。 在实际开发中,工具的选择也至关...
### Java大批量导入Excel:多线程加分片处理详解 #### 概述 在实际工作中,经常需要批量处理大量的Excel数据。当面对成千上万甚至百万级别的数据时,简单的单线程处理方式往往无法满足效率的需求。为了解决这个...
在Java编程领域,多线程下载是一种常见的优化技术,它能显著提高大文件下载的速度,通过将文件分割成多个部分并行下载,充分利用了网络带宽。本项目以"JAVA项目——多线程下载代码"为主题,使用Eclipse集成开发环境...
Java多线程是Java编程语言中的一个重要特性,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多核处理器的普及使得多线程技术成为提升性能的关键手段。本篇将深入探讨Java多线程...
- `CountDownLatch`:计数器,常用于多线程同步,例如,所有线程都完成任务后才能继续执行后续操作。 - `CyclicBarrier`:循环栅栏,允许一组线程等待其他线程到达某个点,然后一起继续执行。 4. **TCP连接与套接...
在提供的源代码中,可能包含了实现这些概念的实际示例,如使用Java的`ExecutorService`管理线程池,`CountDownLatch`或`CyclicBarrier`进行同步控制,或者是使用`Semaphore`实现资源限制等。通过分析和学习这些示例...
5. 状态对象模式:用于在多线程中同步访问对象的状态,例如CountDownLatch、CyclicBarrier和Semaphore等并发工具类,它们可以帮助我们控制线程间的同步和协作。 6. 同步适配器模式:通过包装已有的线程不安全的类,...