求高手点拨一个:“Java线程类”的问题.

小菜举手 2013-11-27 01:35:08
求高手点拨:
一个子线程中,应该不能再架子线程了吧..?
怎么下面的代码:
public void run(){
new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println(ssoo1.read(so3) + "----------------------");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}).start();
System.out.println("CJCO999CJCO!!!!!!!!!成功!!");

中,有一个子线程在这个线程类中启动,却还能够运行...?
就我所知:“一个线程”“在Java里,就是一个最小的原子级单位了”,“不能够再次向里面添加一个线程了”...为什么这里的代码,出现了“线程内部嵌套一个线程”的代码结构...?
...全文
1974 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
danielinbiti 2015-03-07
  • 打赏
  • 举报
回复
不要被主和子概念搞混了。只有进程和线程,对于线程来说,只有优先级,没有线程的子线程概念。 java所谓的主线程无非是进程一创建时就默认启动的线程,处理一些系统的扫尾工作等。只是特殊些,但和Thread从进程的角度来说也是进程下的线程。线程之间没有父子依赖关系的。
愤怒的草 2015-03-07
  • 打赏
  • 举报
回复
坐看大神讨论
饥饿小猪 2015-03-07
  • 打赏
  • 举报
回复
aa
多木多多木 2014-11-18
  • 打赏
  • 举报
回复
main函数本身就是一个线程,在main函数中可以开启多个线程,其他线程中依然可以开线程。只是注意死锁的问题。
多木多多木 2014-11-18
  • 打赏
  • 举报
回复
引用 7 楼 huxiweng 的回复:
main函数也是一个线程,如果按照你的理论(子线程中不能再启动线程),那么线程就没意义了。就一个main函数线程。 所以结论:线程中可以无限开启新的线程。
支持下。
sssskd 2014-10-24
  • 打赏
  • 举报
回复
这个问题问的好啊,同意develop_design_level的观点。
村夫大胡子 2014-10-24
  • 打赏
  • 举报
回复
开启main函数的就是一个主线程,在主线程里面不能开启线程了?
小狐狸Rosie 2014-10-10
  • 打赏
  • 举报
回复
我是过来学习的!
skgary 2014-10-10
  • 打赏
  • 举报
回复
引用 3 楼 develop_design_level 的回复:
如果操作系统允许,一般现在的操作系统可以允许你创建几十万个线程,是没有问题的,也就是运行的慢一些。 呵呵,上面写了错字,这里更正一下。
能跑的不足3000.。。
xtayhicbladwin 2014-10-10
  • 打赏
  • 举报
回复
看一下api里面是有 threadGroup这个属性的,在创建一个线程时,他会指定一个父threadGroup 那也就是说,能开启无数的线程,还能进行管理的。
  • 打赏
  • 举报
回复
最小单位是指可以从系统参与分配资源的最小实体,包括堆栈内存等
丨落叶 2014-01-15
  • 打赏
  • 举报
回复
简约至上 2014-01-15
  • 打赏
  • 举报
回复
Main方法:相当于主线程,在main方法中可以创建并开始一个子线程。同理,在子线程中也可以另开一个新线程。
steenMan 2013-11-27
  • 打赏
  • 举报
回复
线程最小的原子级单位,,java的线程是映射到操作系统的线程上的,编译器编译期间会把你创建的线程跟系统线程对应上,去执行任务,这里和你这么写是没什么联系的,像2楼说的,你可以把你外面那个线程看做是main方法,main 方法就是主线程,然后下面可以创建任意线程
teemai 2013-11-27
  • 打赏
  • 举报
回复
main函数也是一个线程,如果按照你的理论(子线程中不能再启动线程),那么线程就没意义了。就一个main函数线程。 所以结论:线程中可以无限开启新的线程。
末日哥 2013-11-27
  • 打赏
  • 举报
回复
可以多看看《java并发编程实战》英文版叫《Java Concurrency in Practice》
jdgdf566 2013-11-27
  • 打赏
  • 举报
回复
我来告诉你答案。“在Java里,就是一个最小的原子级单位了”,“不能够再次向里面添加一个线程了”是说运行之后是什么结构,而不是说线程是从哪里产生的。就像儿子还可以生儿子,但是孙子是独立的一个人。源代码与运行时的关系问题。
  • 打赏
  • 举报
回复
线程是可以启动子线程的啊,楼主的理解有些问题。
  • 打赏
  • 举报
回复
如果操作系统允许,一般现在的操作系统可以允许你创建几十万个线程,是没有问题的,也就是运行的慢一些。 呵呵,上面写了错字,这里更正一下。
  • 打赏
  • 举报
回复
引用 楼主 u012945210 的回复:
求高手点拨: 一个子线程中,应该不能再架子线程了吧..? 怎么下面的代码:
public void run(){
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						System.out.println(ssoo1.read(so3) + "----------------------");
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
			}
		}).start();
		    System.out.println("CJCO999CJCO!!!!!!!!!成功!!");
			
中,有一个子线程在这个线程类中启动,却还能够运行...? 就我所知:“一个线程”“在Java里,就是一个最小的原子级单位了”,“不能够再次向里面添加一个线程了”...为什么这里的代码,出现了“线程内部嵌套一个线程”的代码结构...?
呵呵,你应该看看《java并发编程实战》。更多的了解一下线程的知识。 线程内部是可以开启任意多个子线程的。 最常见的就是public static void main(String[] args),这个函数你不陌生吧?这就是咱们java程序的入口。你知道么?他就是被Java的主线程调用的。你可以在main里面写任意多的线程(如果操作系统允许,一般现在的操作系统可以运行你创建几十万个线程,是没有问题的,也就是允许的慢一些)。在Jdk1.7中新引进的Fork/Join,就是在运行程序的过程中,把一个大的任务分解成N个子任务来并行运行。这些子任务呢,还可以在细分为更小的子任务。这些子任务都是可以并行的线程在运行。 结论:可以在线程中无限的嵌入更多的子线程。
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧