无处不在的线程,多线程,阻塞队列,并发

编程世界无新鲜事,看你FQ翻得厉不厉害

场景:现在的软件开发迭代速度(一周一更新,甚至一天一发布)真是太快了,今天进行软件更新的时候,看到了有趣的现象,这不就是线程池,ThreadPoolExecutor,阻塞队列,任务(下载和安装)最好的案例嘛!经常看到很多博文在写多线程,并发,队列,却举不出现实生活的场景例子,都在背书吗(天下文章一大抄,看你会抄不会抄)。

现象图示:



我开启了全部更新38个要更新的app,可最多时看到了3个在同时下载,剩下的下载任务在排队(队列),安装过程中,明明已经下载了多个app,可同一时刻只有一个在安装,其他下载好的app也在排队

 

    说起线程,不得不提起进程,

     线程,还真不好下定义,你要问十个人就会有十种答案,我就当线程就是一个可以执行的任务程序(比如上面图片里的下载和安装)。java里线程主要通过继承java.lang.Thread类或实现java.lang.Runnable接口,其实Thread也是实现了Runnable接口的类,所有,线程还是围绕着java.lang.Thread类扩展包装,比如下面要要说的线程池。核心类如下

 1 package java.lang;
 2 
 3 public class Thread implements Runnable {
 4 
 5     ....
 6     //线程的优先级(类似于现实中的会员级别)
 7     /**
 8      * The minimum priority that a thread can have.
 9      */
10     public final static int MIN_PRIORITY = 1;
11 
12    /**
13      * The default priority that is assigned to a thread.
14      */
15     public final static int NORM_PRIORITY = 5;
16 
17     /**
18      * The maximum priority that a thread can have.
19      */
20     public final static int MAX_PRIORITY = 10;
21 
22     //构造线程的几种方式
23     public Thread( );
24 
25     public Thread(Runnable target);
26 
27     public Thread(ThreadGroup group, Runnable target);
28 
29     public Thread(String name);
30 
31     public Thread(ThreadGroup group, String name);
32 
33     public Thread(Runnable target, String name);
34 
35     public Thread(ThreadGroup group, Runnable target, String name);
36 
37     public Thread(ThreadGroup group, Runnable target, String name,
38 
39                   long stackSize);
40 
41     //下面的代码和生命周期有关
42    public void start( );
43 
44     public void run( );
45 
46     public void stop( );   // Deprecated, do not use
47 
48     public void resume( );  // Deprecated, do not use
49 
50     public void suspend( );    // Deprecated, do not use
51 
52     public static void sleep(long millis);
53 
54     public static void sleep(long millis, int nanos);
55 
56     public boolean isAlive( );
57 
58     public void interrupt( );
59 
60     public boolean isInterrupted( );
61 
62     public static boolean interrupted( );
63 
64     public void join( ) throws InterruptedException;
65 
66     .........
67 
68 }
View Code

 

这不就是多线程ThreadPoolExecutor和阻塞队列吗

相关文章: