有三个集合,分表存放字10000个无序的符串,启动三个线程,一个线程处理一个集合的数据,将三个结合
不好说,看你这三个方法耗时多少,如果这三个方法秒过,那么
遍历一次,分别调用ABC三个方法快,
主要是 Vector 是一个synchronized、你要是3个线程去取对象的话,会在get方法中阻塞;
反之。。。
上java代码
import java.util.HashMap;import java.util.Map;public class Test2 {Map map = new HashMap();public Map getMap() {return map;}public Test2() {map.put("A", "START");map.put("B", "START");map.put("C", "START");}public static void main(String args[]) {Test2 a = new Test2();a.exec();System.out.println("三个线程启动");while (true) {Map map = a.getMap();if ("END".equals(map.get("A")) && "END".equals(map.get("B"))&& "END".equals(map.get("C"))) {break;}}System.out.println("三个线程运行结束");}public void exec() {try {threadStart();} catch (Exception e) {}}public void threadStart() throws Exception {Thread t1 = new Thread(new Runnable() {public void run() {disp("线程一");map.put("A", "END");}});t1.start();Thread t2 = new Thread(new Runnable() {public void run() {disp("线程二");map.put("B", "END");}});t2.start();Thread t3 = new Thread(new Runnable() {public void run() {disp("线程三");map.put("C", "END");}});t3.start();}public void disp(String tName) {for (int i = 0; i < 10000; i++) {if (i % 3 == 0)System.out.println(tName + "---A");if (i % 3 == 1)System.out.println(tName + "---B");if (i % 3 == 2)System.out.println(tName + "---C");}}}解释,map为三个线程公用缓存,当三个线程并行各自结束的时候,将结束标志写入map中。
主程序进行无限循环,判断缓存中三个线程是否执行完毕,(注:无限循环中应加入Thread.sleep函数),当map中所有标志位置为结束,主程序随之结束。
请在C++11以上编译
PS:关于三个bool变量,因为进程使用的次数少,所以可以直接循环,不然还要使用互斥。
#include <string> //字符串
#include <vector> //向量(动态数组)
#include <thread> //进程库
#include <algorithm> //排序函数
using namespace std;
vector <string> a, b, c;
bool _a = true, _b = true, _c = true; //这些变量用来检测对应数组是否结束
int main() {
//创造进程
thread ta([](){ sort(a.begin(), a.end()); _a = false; });
thread tb([](){ sort(b.begin(), b.end()); _b = false; });
thread tc([](){ sort(c.begin(), c.end()); _c = false; });
//将进程分离运行,此时进程不受程序控制,需要变量检测
ta.detach();
tb.detach();
tc.detach();
while(_a || _b || _c); //循环判断三个进程是否结束
return 0;
}
不清楚,插个眼
有三个集合,分表存放字10000个无序的符串,启动三个线程,一个线程处理...
include <string> \/\/字符串 #include <vector> \/\/向量(动态数组)#include <thread> \/\/进程库 #include <algorithm> \/\/排序函数 using namespace std;vector <string> a, b, c;bool _a = true, _b = true, _c = true; \/\/这些变量用来检测对应数组是否结束 int main() {\/\/创造进程 ...
用EXCEL制作工资表,分总表和分表,分表数据出来后总表自动出来一个统计数...
1、制做好各分表各数据,制做好汇总表格式,然后在汇总表里需要显示哪个分表的数据就按:“=”,并点击该分表的单元格,以后此数据就会随着分表单元格的数据改变而更改。比如:“工资汇总”单元A1要显示“工资”表里的A1,则:=工资!A1 2、把各员工工制作出来(记得加一栏:部门名称),然后采用...
数据库架构选型与落地,看这篇就够了
注:分库还是分表核心关键是有没有IO瓶颈。 分片方式都有什么呢? RANGE(范围分片) 将业务表中的某个 关键字段排序 后,按照顺序从0到10000一个表,10001到20000一个表。最常见的就是 按照时间切分 (月表、年表)。 比如将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查...
Mysql单表太大,性能受影响求指点
这么大的表优化是很痛苦的,看你对数据的用途,如果不经常查询、而是频繁的增加,可以考虑定期(每周或者每日)把表中的数据复制到历史表中,清空工作表的数据,这样插入的效率能大大提高,但是查询的时候需要在两个表中进行查询。用于频繁插入数据的工作表要尽量少建索引,用于查询的历史表要多建索引。
学习java需要学习什么?
java学习一共分为6个阶段,有273个技能点,有朋友把大数据部分也加入了进来,大数据部分加入到java中肯定是不合理的,也是不负责的,第一阶段:java基础部分,有54个技能点,第二阶段:javaweb开发,有44个技能点,第三阶段:企业级框架开发,包含技能点37个,第四阶段:段手段分离开发,包含技能点35个...
家里的一个月几个分表的度数加起来为什么和总表的度数对不上,会差...
如果你的家里用电量很大的话(比如说 10000 度电),有可能差 100 多度在误差范围内;如果总表的度数比分表总和小的话,则很有可能是总表坏了;如果在总表和分表之间还有其它电器的话,则这些电器的用电量没有使用分表进行计量;如果总表和分表都比较准确,且前面三条都不存在的话,则很有可能...
...一个月总表数55000度,分表只有45000度,差10000度,电损啥原因?_百度...
不一定是电损,可能是分表误差过大。