前两篇介绍了一些Java并发的基础知识,博主正巧遇到一种需求:查询数据库,根据查询结果集修改数据库记录,但整个流程是做成了一个schedule的,并且查询比较耗时,每两分钟执行一次,故需要在此基础上考虑性能消耗,sql优化可以提高一些系统效率,同样,多线程也可以...
下面博主做个DEMO引出一些Java并发的实际应用场景:
import java.util.ArrayList; import java.util.List; public class TestThread implements Runnable{ private String name; private Integer i = 0; List list = new ArrayList(); public TestThread(String name) { this.name=name; for(int i=0; i<100; i++){ list.add(i); } } @Override public void run() { Long past = System.currentTimeMillis(); getAndSet(); System.out.println(System.currentTimeMillis()-past); } private void getAndSet(){ while(true){ synchronized (i){ if(i>=100){ break; } System.out.println(list.get(i++)); } try{ Thread.sleep(200); }catch(Exception e){ e.printStackTrace(); } } } public static void main(String[] args) { TestThread a = new TestThread("A"); new Thread(a).start(); /*new Thread(a).start(); new Thread(a).start(); new Thread(a).start();*/ } }
通过以上代码(可以跑)感受得到单线程和四线程的差距,设备越好,cpu核数越多,应该结果越明显,我们平常应该使用线程池来管理线程,因为比较方便..
多线程使用的主要目的在于:
1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说,可能就是一个请求一个线程。或多个请求一个线程。如果是单线程,那同时只能处理一个用户的请求。
2、伸缩性:也就是说,你可以通过增加CPU核数来提升性能。如果是单线程,那程序执行到死也就利用了单核,肯定没办法通过增加CPU核数来提升性能。