分享一个关于多线程的程序!!!
线程类部分:
public class CheThreadExt extends Thread {
private String nameString;
public CheThreadExt(String name) {
this.nameString = name;
}
public void run() {
int i = 0 ;
while (i < Constant.allTimeInteger) { //时间 秒
try {
Thread.currentThread().sleep(1000);
CarObj carObj = CarSynTable.getOneCar(nameString);
carObj.setTimeInteger(carObj.getTimeInteger() + 1);
carObj.setJuliInteger(carObj.getJuliInteger()
+ carObj.getSpeedInteger());
CarSynTable.putOneCar(nameString, carObj) ;
i ++ ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 代码执行
*
* @param args
*/
public static void main(String[] args) {
CheThreadExt thread1 = new CheThreadExt("Car_A");
CheThreadExt thread2 = new CheThreadExt("Car_B");
CheThreadExt thread3 = new CheThreadExt("Car_C");
thread1.start();
thread2.start();
thread3.start();
for(int i = 0 ; i < 10 ; i ++){
try {
Thread.currentThread().sleep(5000);
CarSynTable.printCurCarsInfo() ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.exit(0);
}
}
HashMap以及对象初始化部分:
public class CarSynTable {
private static HashMap<String, CarObj> carCurStatus = new HashMap<String, CarObj>();
public static synchronized void putOneCar(String thredNm, CarObj carobj) {
carCurStatus.put(thredNm, carobj);
}
public static synchronized CarObj getOneCar(String thredNm) {
if(null == carCurStatus.get(thredNm)){
return new CarObj(RandomUtil.getSpeed(), 0, 0);
}
return carCurStatus.get(thredNm);
}
public static synchronized HashMap<String, CarObj> getCarCurStatus() {
return carCurStatus;
}
public static synchronized void printCurCarsInfo() {
Set set = getCarCurStatus().entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
for (int i = 0; i < entries.length; i++) {
CarObj carobj = (CarObj) entries[i].getValue();
System.out.println("CarName : " + entries[i].getKey().toString()
+ ", speed : " + carobj.getSpeedInteger() + ", time : "
+ carobj.getTimeInteger() + " , juli : "
+ carobj.getJuliInteger() + " !");
}
}
}
public class CarObj {
private Integer speedInteger = 0; // 速度
private Integer juliInteger = 0; // 距离
private Integer timeInteger = 0;// 时间
public CarObj() {
}
/**
*
* @param speed 米/秒
* @param juli 米
* @param time 秒
*/
public CarObj(Integer speed, Integer juli, Integer time) {
speedInteger = speed ;
juliInteger = juli ;
timeInteger = time ;
}
public Integer getSpeedInteger() {
return speedInteger;
}
public void setSpeedInteger(Integer speedInteger) {
this.speedInteger = speedInteger;
}
public Integer getJuliInteger() {
return juliInteger;
}
public void setJuliInteger(Integer juliInteger) {
this.juliInteger = juliInteger;
}
public Integer getTimeInteger() {
return timeInteger;
}
public void setTimeInteger(Integer timeInteger) {
this.timeInteger = timeInteger;
}
}
public class CheThreadExt extends Thread {
private String nameString;
public CheThreadExt(String name) {
this.nameString = name;
}
public void run() {
int i = 0 ;
while (i < Constant.allTimeInteger) { //时间 秒
try {
Thread.currentThread().sleep(1000);
CarObj carObj = CarSynTable.getOneCar(nameString);
carObj.setTimeInteger(carObj.getTimeInteger() + 1);
carObj.setJuliInteger(carObj.getJuliInteger()
+ carObj.getSpeedInteger());
CarSynTable.putOneCar(nameString, carObj) ;
i ++ ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 代码执行
*
* @param args
*/
public static void main(String[] args) {
CheThreadExt thread1 = new CheThreadExt("Car_A");
CheThreadExt thread2 = new CheThreadExt("Car_B");
CheThreadExt thread3 = new CheThreadExt("Car_C");
thread1.start();
thread2.start();
thread3.start();
for(int i = 0 ; i < 10 ; i ++){
try {
Thread.currentThread().sleep(5000);
CarSynTable.printCurCarsInfo() ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.exit(0);
}
}
HashMap以及对象初始化部分:
public class CarSynTable {
private static HashMap<String, CarObj> carCurStatus = new HashMap<String, CarObj>();
public static synchronized void putOneCar(String thredNm, CarObj carobj) {
carCurStatus.put(thredNm, carobj);
}
public static synchronized CarObj getOneCar(String thredNm) {
if(null == carCurStatus.get(thredNm)){
return new CarObj(RandomUtil.getSpeed(), 0, 0);
}
return carCurStatus.get(thredNm);
}
public static synchronized HashMap<String, CarObj> getCarCurStatus() {
return carCurStatus;
}
public static synchronized void printCurCarsInfo() {
Set set = getCarCurStatus().entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
for (int i = 0; i < entries.length; i++) {
CarObj carobj = (CarObj) entries[i].getValue();
System.out.println("CarName : " + entries[i].getKey().toString()
+ ", speed : " + carobj.getSpeedInteger() + ", time : "
+ carobj.getTimeInteger() + " , juli : "
+ carobj.getJuliInteger() + " !");
}
}
}
public class CarObj {
private Integer speedInteger = 0; // 速度
private Integer juliInteger = 0; // 距离
private Integer timeInteger = 0;// 时间
public CarObj() {
}
/**
*
* @param speed 米/秒
* @param juli 米
* @param time 秒
*/
public CarObj(Integer speed, Integer juli, Integer time) {
speedInteger = speed ;
juliInteger = juli ;
timeInteger = time ;
}
public Integer getSpeedInteger() {
return speedInteger;
}
public void setSpeedInteger(Integer speedInteger) {
this.speedInteger = speedInteger;
}
public Integer getJuliInteger() {
return juliInteger;
}
public void setJuliInteger(Integer juliInteger) {
this.juliInteger = juliInteger;
}
public Integer getTimeInteger() {
return timeInteger;
}
public void setTimeInteger(Integer timeInteger) {
this.timeInteger = timeInteger;
}
}
...全文
相关推荐
必看!!!必看!!!必看!!!【老师机精选】分享资源.txt
必看!!!必看!!!必看!!!【老师机精选】分享资源
Python-利用墨墨背单词的分享功能拿每日20个的单词上限奖励多线程
多线程允许程序同时执行多个任务,这在处理如定时分享这种重复性任务时能显著提高效率,避免人工手动操作的繁琐。
分享一个入门级可控多线程shell脚本代码
本文将深入探讨一个入门级的可控多线程Shell脚本代码,适用于那些需要处理大量并发任务但又不想过于复杂的初学者。多线程在编程中通常用于提高程序执行效率,特别是在处理并行任务时。
Python实现的一个自动售饮料程序代码分享
"Python实现的一个自动售饮料程序代码分享"这个Python程序是一个简单的自动售货机模拟器,适用于初学者理解和实践基础的编程概念。作者在学习Python大约100小时后编写了这个程序,主要
易语言多线程简单实用例子分享
在这个“易语言多线程简单实用例子分享”中,我们将探讨如何在易语言中利用多线程技术来提高程序的运行效率和用户体验。多线程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,而不是顺序地执行。


Java SE
