比如我现在有个需求,这有n个规则,规则执行是向数据库选择的表导入数据的,每个规则可能耗时较长,依次点击这个规则进行执行。
请问,这个时候需不需要用到线程?这样的n可以有多少个?
我测试了下,不用线程,执行也都没问题啊,用new Thread().start() 也没啥区别,所以不懂了,问下
请问,这个时候需不需要用到线程?这样的n可以有多少个?
我测试了下,不用线程,执行也都没问题啊,用new Thread().start() 也没啥区别,所以不懂了,问下
使用场景的话,遍地都是吧,比如数据库连接池,比如典型的抢票实现等。现在基本不用自己写多线程的代码,都是使用别人写好的框架或者工具类。
那么你单线程执行就是 1->2->3->->9->10;//用时10h
多线程执行,每个线程执行一个规则,每个线程 用时1h,因为同步执行所以项目总用时1h;
讲道理是这样写的,如果效果不明显的话,你增加数据库操作的次数试试。比如1000次,用个循环
既然要分开执行 那么 那部分代码就要拆分出来(或者改变参数,最终让执行部分为n)例如int n = 10;
for(int i=0;i<n;i++){
System.out.println(n*n);//假设这行代码执行时间为1h,那么我整个程序执行下来就要10h
}public class Tests extends Thread{
public static void main(String[] args) throws IOException {
int n = 10;
for(int i=0;i<n;i++) {
new Tests(i).start();//启动线程时间忽略不计 那么总共用时1h
}
}
private int n;
public Tests(int n) {
this.n = n;
}
@Override
public void run() {
System.out.println(n*n);
}
}
既然要分开执行 那么 那部分代码就要拆分出来(或者改变参数,最终让执行部分为n)例如int n = 10;
for(int i=0;i<n;i++){
System.out.println(n*n);//假设这行代码执行时间为1h,那么我整个程序执行下来就要10h
}public class Tests extends Thread{
public static void main(String[] args) throws IOException {
int n = 10;
for(int i=0;i<n;i++) {
new Tests(i).start();//启动线程时间忽略不计 那么总共用时1h
}
}
private int n;
public Tests(int n) {
this.n = n;
}
@Override
public void run() {
System.out.println(n*n);
}
}
这个我清除,我现在是每点执行一次,它就启动一个线程,跟你这个应该一样吧?但是这样,耗时比单个执行完依次点击慢好多
多线程加连接池。
爬虫
web服务器,tomcat/jetty等都使用了多线程业务处理不算,要并发写入单个数据库,并发多了以后,效率下降