问题补充说明:是多个线程使用同一个已经new好的业务对象?还是多个线程使用相同业务的不同对象?
一、多线程
1、操作系统有两个容易混淆的概念,进程和线程。
来自进程:一个计算机套饭权乱程序的运行实例,包含了需要执行360问答的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。
线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。晚买呢德翻武杀星同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内存和其他资源。
2、Java标准库提供了进程和线程相关的API,进程主要包括表示进程的java.lang.P树东界论刚远科rocess类和创帮孩省心无持充倍几建进程的java.lang.ProcessBuilder类;
表示线程的是j顾执客艺ava.lang.Thread类,在虚拟机启动之后破装乎重范金滑,通常只有Java类的main方法这个普通线程运行,运行时可以创建和启动新的线程;还有一类守护线程(damonthread),重先守护线程在后台运行,提供程序运行时所需的服务。当虚拟机中运行的所有线程都是守护线程时,虚拟机终止二固运行。
3、线程间的可见性:一个线程对进程中共享的数据植精架编获绿罗的修改,是否对另一个线程可见
可见性问题:
a、CPU采用时间片轮转等不同算法来对线程进行调度
[java]viewplaincopy
publicclassIdGenerator{
privateintvalue=0;
publicintg委一状夫械etNext(){
returnvalue++;
}
}
对于IdGen药般员站兰头封混操县erator的getNext()方法,在多线程下不能保证返回值是不重复的:各个线程种致普协之间相互竞争CPU时间来获取运行机会,CPU切换可能发生在执行间隙。
以上代码getNext()的指令序列:CP哥占压维蒸U切换可能发生在7条指令之间,多个getNext的指令交织在一起。
标签:多线程,java,混滑