多线程与线程池

一、进程与线程

线程都是在进程基础上并发执行。
如果现在运行多个任务,则说有的资源被所有线程共用。

二、Java的多线程实现

继承thread类

    (1)thread类在java.lang包中,一个类继承了这个类,就叫做多线程操作类,并且必须明确的覆写run()方法。
    (2)调用start()方法才是真正的启动线程。
    (3)java允许java程序访问操作系统的函数,在Thread的start()方法
中,有一个native关键字,表示的是一个由java调用本机操作系统函数的关键字。同时证明了,要想实现多线程,必须要获得操作系统的支持。
    (4)sleep()方法,使线程休眠,时间为微秒
    (5)join()方法使其他线程等待当前线程终止,等待时间为毫秒
    (6)static void yield()方法,当前运行的线程释放处理器资源
    (7)返回当前运行的线程引用。

实现runnable接口

    (1)实现runnable接口的类在创建线程时,通过Thread类的有参构造函数,创建线程,传入两个参数,第一个传入实现runnable接口的对象,第二个参数传入线程的名字。
深入比较Thread和Runnable接口
(1)从定义格式上,Thread实现了Runnable接口,当使用其他类mythread事项runnable接口时,相当于采用代理模式,Thread实现核心操作,mythread作为代理。
(2)Thread实现的线程不能共享资源,Runnable接口实现的线程可以共享资源。例如卖票因为Thread的子类中都有单独的票数变量,所以各卖各的。而Runnable不一样
(3)使用结论:使用Runnable接口比Thread类有以下优点:
     适合多个线程共同处理一个资源,可以避免单继承带来的影响,增加了程序的健壮性。


有段程序执行速度比较慢:
考虑几个方面:
1.SQL是否有问题?
2.是否使用缓存?
3.多线程是否使用?
4.WEB容器的调优:JVM

线程管理:控制项目的线程数

线程池的核心组成部分:

任务 -- Runnable
线程 -- Thread
任务仓库 -- blockingQueue(排队,让线程等着任务上门) -- 队列漫的时候,放入元素会阻塞,队列空的时候,获取元素会阻塞

多线程与线程池
多线程与线程池