一。高并发
多线程编程的含义就是将一个程序任务分为几个可以同时并发执行的子任务。
程序:程序是含有指令和数据的文件,也可以说程序是静态代码,被存储在
每个Java程序都有一个默认的主线程,对于应用程序来说其主线程就是main()方法执行的线程。要想实现多线程,必须在主线程中创建新的线程对象,Java语言使用Thread类及其子类的对象来表示线程,新线程的建立在它完整的生命周期中通常要经历五种状态,通过线程的控制和调度可以实现这几种状态之间的转化。
使用start()方法激活线程,而不是调用run()方法
Thread.Sleep(0)的作用就是“触发操作系统立刻重新进行一次CPU竞争”。抢占式操作系统,就是说如果一个进程得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU 。总结出Thread.Sleep()的作用就是告诉操作系统“在未来的多少毫秒内我不参与CPU竞争";
如果某个线程被其他线程中断,则该sleep()方法将引发InterruptedException,这意味着Thread.sleep()方法必须包含在try和catch块内,或者必须使用throws子句指定。
Java虚拟机采用抢占式调度模型,它是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中线程的优先级相同,那么就随机地选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。一个线程会因为以下原因而放弃CPU:
1)Java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其他线程获得运行机会。
2)当前线程因为某些原因而进入阻塞状态。
3)线程运行结束。
如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法之一:
调整各个线程的优先级。
让处于运行状态的线程调用Thread.sleep()方法。
让处于运行状态的线程调用Thread.yield()方法。
让处于运行状态的线程调用另一个线程的join()方法。
Thread类有三个静态常量:
MAX_PRIORITY:取值为10,表示最高优先级。
MIN_PRIORITY:取值为1,表示最低优先级。
NORM_ PRIORITY:取值为5,表示默认的优先级。
调用Thread类的setDaemon(true)方法,就能把一个线程设置为后台线程
后台线程与前台线程相伴相随,只有当所有前台线程结束生命周期,还在运行的后台线程才会被Java虚拟机终止生命周期。只要有一个前台线程还没有运行结束,运行中的后台线程就不会被Java虚拟机终止生命周期。
主线程默认情况下是前台线程
Thread类的isDaemon()方法用来判断一个线程是否是后台线程
在JDK的java.util包中提供了一个实用类Timer,它能够定时执行特定的任务。
TimerTask类表示定时器执行的一项任务。
二。多线程
存在于互联网分布式系统架构