`
wangzi6hao
  • 浏览: 211844 次
  • 性别: Icon_minigender_1
  • 来自: sdf
社区版块
存档分类
最新评论

java多线程模拟读不重复的数据 java多线程按顺序读数据

    博客分类:
  • Java
阅读更多

以下内容是根据本人的一些业务逻辑来做的一个dome,应该有很多地方还不完善,请大家看到的朋友可以指点一下程序的错误.

DBTest.java

package test.thread.test;

/**
* 模拟一个数据库加载数据
*
* @author wangzi6hao
*/
public class DBTest {
/**
* 模拟初使化从数据库中加次数据
*/
public static void initListObject() {
for (int i = 1; i <= 10; i++)
ListPool.list.add("linkedList" + i);
}

/**
* 模拟list数据快使用完成时,再到数据库中加载数据.
*
* @param count
*            添加的个数
*/
public static void addListObject(int count) {
String str = ListPool.list.getLast().replaceAll("linkedList", "");
int k = Integer.parseInt(str);
for (int i = 1; i <= count; i++) {
int j = k + i;
ListPool.list.add("linkedList" + j);
}
System.out.println("增加list后的大小:" + ListPool.list.size());
}

/**
* 删除list数据
*/
public static void removeListObject() {
ListPool.list.remove(0);
System.out.println("删除一个list后的大小:" + ListPool.list.size());
}
}

 

 ListPool.java

package test.thread.test;

import java.util.LinkedList;

public class ListPool {
public static LinkedList<String> list = new LinkedList<String>();// 定义全局数据存放位置
public final static int THREAD_COUNT = 10;// 定义最大启动线程个数
}

 

DoSomething.java

package test.thread.test;

public class DoSomething implements Runnable {

public void run() {
try {
while (true) {
System.out.println("第一次得到大小:" + ListPool.list.size());
while (ListPool.list.size() > 1) {// 必须保留最后一个,做为下一次更新时的起初id
String info = "";
synchronized (ListPool.list) {
info = ListPool.list.get(0);
DBTest.removeListObject();
System.out.println("第二次得到大小:" + ListPool.list.size());
if (ListPool.list.size() <= 5) {
DBTest.addListObject(5);// 模拟从数据库中加载数据
}
}
System.out.println(info);// 打印出内容,在现实中模拟到其它地方实现逻辑处理
Thread.sleep((int) (Math.random() * 1000));//睡眠随机的毫秒,实现中可以改成1或者10毫秒,适当的释放资源给其它程序使用

}
System.out.println("测试执行");
Thread.sleep(6 * 1000);
DBTest.addListObject(5);
}
} catch (Exception e) {
e.printStackTrace();
}

}
}

 

TestMain.java

import test.thread.test.DBTest;
import test.thread.test.DoSomething;
import test.thread.test.ListPool;

public class TestMain {

/**
* @param args
*/
public static void main(String[] args) {
DBTest.initListObject();
int threadCount = 1;
try {

while (threadCount < 1000) {// 必须保留最后一个,做为下一次更新时的起初id
System.out.println("线程个数:" + threadCount);
DoSomething doSomething = new DoSomething();
Thread thread = new Thread(doSomething);
//thread.setDaemon(true);//这里在tomcat或者其它的web应用程序方面启动线程时应该设置为true.在tomcat 关闭的时候,线程也应该关闭.因为用户线程是基于jvm的,如果不设置为true(守护线程),tomcat关闭的时候,线程还会在运行,那会消耗cpu 与内存的.
thread.setDaemon(false);//在main方法中,这里必须设置为用户线程.因为设置为守护线程时,main方法执行完毕线程也自动退出了,事实上程序还没有执行完成.
thread.start();
threadCount++;
}

} catch (Exception e) {
e.printStackTrace();
}

}

}
 
分享到:
评论

相关推荐

    07Java 多线程编程1

    Java的多线程编程是开发高并发应用的关键技术之一,主要涉及到线程的创建、运行、调度、同步以及生命周期管理。...理解并掌握这些Java多线程编程的核心概念和实践,对于编写高效、稳定的应用至关重要。

    多线程计算

    在处理大量数据、实时响应或者进行复杂运算时,多线程是不可或缺的工具。本文将深入探讨多线程计算的概念、优势、实现方式以及在实际应用中的注意事项。 1. 多线程计算的基本概念 - 线程:线程是程序执行的最小...

    Java模拟双色球彩票系统

    - **多线程与定时任务**:利用Java并发库中的工具类实现多线程处理和定时任务调度。 综上所述,通过Java语言实现的模拟双色球彩票系统不仅能够帮助学习者掌握核心编程技能,还能加深对实际应用的理解与应用能力。

    深入理解-Java-多线程核心知识:跳槽面试必备.docx

    ### 深入理解Java多线程核心知识:跳槽面试必备 #### 一、引言 多线程是Java编程中的一个重要概念,对于提升软件性能、优化用户体验有着不可或缺的作用。然而,多线程的学习门槛相对较高,如果不正确地理解和使用...

    人工智能-项目实践-多线程-Paxos算法的多线程实现.zip

    总的来说,Paxos算法的多线程实现是将分布式一致性理论与实际编程技术结合的体现,它需要深入理解Paxos算法的工作原理以及Java多线程机制,以构建出高效且稳定的分布式系统。在这个过程中,还需要考虑性能优化、容错...

    模拟rdt协议数据传输.rar_Noé 1_RDT_java udp_java 协议

    RDT是一种在不可靠的网络环境中提供可靠数据传输的协议,其核心目标是确保数据的无差错、顺序传输以及丢失或重复数据的检测与处理。RDT通常分为单向和双向传输两种模式,本项目可能涉及的是双向模式,因为实际网络...

    java实现 模拟帧传输停等协议

    - 数据传输通常涉及`InputStream`和`OutputStream`,用于读取和写入数据。 3. **Java实现停等协议步骤**: - 创建服务器端`ServerSocket`,监听指定端口,等待客户端连接。 - 客户端创建`Socket`,连接到服务器...

    基于广度优先算法的多线程网络爬虫毕业设计.doc

    TCP提供可靠的数据传输,确保数据按顺序到达且无丢失,适合对数据完整性要求高的场景。而UDP则更注重速度,不保证数据的顺序和可靠性,适用于实时性要求高的应用,如视频流媒体。 【SOCKET网络编程】 SOCKET是网络...

    多线程应用

    在进行多线程实验时,常见的任务可能包括创建并发队列、模拟生产者消费者问题、实现线程安全的数据结构,或者通过线程池执行大量异步任务。通过这些实验,学生可以深入理解多线程的挑战和解决方案,为实际项目开发...

    java多人聊天室可私聊

    这个项目的核心知识点包括Java编程、网络通信、多线程、GUI设计以及数据交换格式。 首先,Java编程是实现这个聊天室的基础。Java以其跨平台的特性,成为了开发桌面应用程序的常用选择。开发者可能使用Java Swing或...

    java练习题大全

    Java是广泛使用的编程语言之一,它具有面向对象、平台无关性、安全性、多线程等众多特点。接下来,我们根据提供的文件内容详细解析Java练习题中所涉及的关键知识点。 1. Java语言的优点和特点之一是多线程,这允许...

    薯条贩卖机 Java 课设.zip

    Java提供了Thread类和Runnable接口来支持多线程编程,可以实现并行处理,提高系统效率。 8. **设计模式**:在设计薯条贩卖机系统时,可以借鉴设计模式,如工厂模式用于创建贩卖机对象,单例模式确保全局只有一个...

    JAVA爬虫项目源代码

    【JAVA爬虫项目源代码】是一个使用JAVA编程语言编写的爬虫项目,它结合了多线程编程和队列管理技术来提升数据抓取的效率和并发性。在这个项目中,开发者利用了以下核心技术: 1. **HttpClinet**:HttpClinet是Java...

    基于广度优先算法的多线程网络爬虫学位论文.doc

    综上所述,本论文通过Java实现的基于广度优先算法的多线程网络爬虫,结合了网络协议、多线程技术、Socket编程、数据存储和网页信息解析等多个关键知识点,实现了高效、稳定的信息采集功能。在实际应用中,这种爬虫...

    Java数据结构和算法 (第二版)

    同时,可能会对并发编程中的数据结构和算法进行深入讨论,如ConcurrentHashMap的实现原理及其在多线程环境下的优势。 总的来说,《Java数据结构和算法(第二版)》是一本深入解析Java编程中数据结构和算法的书籍,...

    java集合、IO、多线程、网络编程、DAO设计模式45道练习题。敢接吗!

    #### 三、多线程编程 **题目15**: 有500张火车票编号从001到500,5个窗口同时售票,请写出一个类,实现5个窗口可同时售票。 **解析**: 这个问题可以通过使用`Thread`类和`synchronized`关键字来实现线程间的同步,...

    简单的龟兔赛跑,运用多线程,在jdk8编写.zip

    这个"简单的龟兔赛跑,运用多线程,在jdk8编写"的示例是基于经典的寓言故事,通过多线程来模拟龟兔赛跑的过程。下面将详细介绍这个例子中的相关知识点。 1. **线程基础**: - **线程**:线程是操作系统分配CPU时间...

    java发牌程序,扑克牌

    Java的`Random`类可以帮助我们生成不重复的随机序号,以确保每张牌在洗牌后都有可能出现。 4. **面向对象编程**:在Java中,你可以创建一个`Deck`类来管理牌堆,包含洗牌、发牌等方法。同时,可以创建一个`Player`...

    Thinking in Java 中文第四版+习题答案

    1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段...

    用java编写的随即滚动姓名的小程序

    接着,我们要了解Java的多线程。Java提供了多种方式来创建和管理线程,包括继承`Thread`类和实现`Runnable`接口。在这个程序中,我们可以选择实现`Runnable`接口,因为它更符合面向对象的设计原则,可以避免单继承的...

Global site tag (gtag.js) - Google Analytics