线程是堆共享
发布时间: 2024-09-19 14:25:30
① 进程,线程和协程的区别
协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因版此,程序员权必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。
进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
② java堆内存被所有线程所共享,不明白2个线程如何共享2个对象中的同名变量。
首先:堆内存共享是相对于栈内存的。栈是每一个线程都独有的,线程之间互不一向,每一个线程都有自己的栈内存。但是堆内存不一样,在一个JVM实例里面,不管你有多少线程,创建了多少对象,都是放在一块堆内存的。也就是说一个JVM实例栈内存区域是有多个,每一个线程持有一个,而堆内存只有一个,是线程共享的。
其次:针对你这个代码,这个情况下每一个线程确实是对应着不同的对象。也就是在同一个堆(也只有一个堆)里面创建了两个Demo对象。你老师的意思应该是
Demo demo = new demo();
Thread S1=new Thread(demo);
Thread S2=new Thread(demo);
这样两个线程都是操作堆内存共享的对象。
③ 多线程可以共享堆栈吗为什么
1)【Windows线程模】
在Windows,每个线程各自拥有自己的堆栈,且线程的堆栈式不可共享的!这是由Windows线程模型决定的,用户不可改变。
2)【应用程序的堆(Heap)】
在一个多线程结构的应用程序中,堆HEAP中的对象、变量可以被多个线程共享。