java 线程共用代码段吗?

java的线程里run方法里的代码段,new几个Thread类一块运行时,内存中只有一套代码吧?

方法代码段在类加载的时候放入方法区中,只有一套代码。new几个Thread类,run实际是指向方法区的同一代码块。

Java VM的代码放在方法区,在class被load的时候load到内存里面。所以代码时只有一套的。
而new几个Thread,他们各自有自己的栈区,局部变量放在栈区。这个不是共享的。至于你问到,多核状态下,4套代码是不是更快,其实cpu的预取的确会把一部分代码取到它的cache里,也就是代码会在cache里可能重复(假设你同时正好在运行几个相同的Thread)。但是这个不是Java VM做的,而是现代的CPU都是这么做的。虚拟机本身只是一个栈操作的应用程序,它并不会操作cache。

都在内存中,由操作系统给每个线程分配时间片,分到时间片的,就开始自己的任务执行,时间片用完了,那让别人执行

对于冯诺依曼架构的计算机(包括x86),内存既存储代码,也存储数据。代码当然只要一份就够了。你说的应该是指数据,数据分为堆栈和堆两部分,每个线程拥有自己的堆栈,但是共享堆存储。每个进程则拥有完全隔离的堆存储。