多线程与线程池
一、进程与线程
线程都是在进程基础上并发执行。
如果现在运行多个任务,则说有的资源被所有线程共用。
二、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(排队,让线程等着任务上门) -- 队列漫的时候,放入元素会阻塞,队列空的时候,获取元素会阻塞