java是不是存在父线程子线程之说

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java是不是存在父线程子线程之说相关的知识,希望对你有一定的参考价值。

为什么我们老师说做父进程子进程只能用C语言?
java的Process类是不是操纵线程的?
父子进程除了创建顺序先后外还有什么定义?

1、java程序是允许在java虚拟中的,也就是JVM中,所有的java程序在JVM中都是以线程的形式运行的,java没有进程之说,只有线程。这点好理解吧。
2、当使用javaAPI创建一个外部进程,比如java调用一个shell脚本,
例子:
Process p= Runtime.getRuntime().exec(“echo 123”);
这时候Process就派上用场了,调用其API可以获得其运行状态,包括:输入流,输出流,错物流,完结状态。可是记住,创建的这个进程并不是在JVM中运行的。
3、java的线程操纵是Thread,Runnable,ThreadGroup,和concurrent包里的东西,有兴趣可以自己学
4、多线程的时候,父线程创建很多线程运行, 可以获得被创建线程的运行状态,操纵子线程,多线程比较复杂,建议单独学习。

PS:码字好累。。。追问

其他问题都搞懂了。你能解释一下最后一个问题吗——父子进程除了创建顺序先后外还有什么定义?

追答

你的问题我可以理解为“父子线程的定义用创建先后来区分,创建先的是父线程,创建后的事子线程”。
这个理解是不严谨的。
当在一个运行的线程A里,创建另一个线程B的时候,那么A是父线程,B是子线程。
当在一个运行的线程A里,创建线程B,然后又创建了线程C,这时候虽然B比C创建早,可是B并不是C的父线程,而A是B和C的父线程。

这就是定义,严格的讲是:当一个线程创建了另一个线程的时候,那么这个线程被称为另一个线程的父线程,另一个线程被称为这个线程的子线程。

参考技术A java中存在父线程和子线程的说法,如下解释:
1、java程序是允许在java虚拟中的,也就是JVM中,所有的java程序在JVM中都是以线程的形式运行的,java没有进程之说,只有线程。
2、当使用javaAPI创建一个外部进程,比如java调用一个shell脚本,
例子:
Process p= Runtime.getRuntime().exec(“echo 123”);
这时候Process就派上用场了,调用其API可以获得其运行状态,包括:输入流,输出流,错物流,完结状态。可是记住,创建的这个进程并不是在JVM中运行的。
3、java的线程操纵是Thread,Runnable,ThreadGroup,和concurrent包里的东西,有兴趣可以自己学
4、多线程的时候,父线程创建很多线程运行, 可以获得被创建线程的运行状态,操纵子线程,多线程比较复杂,建议单独学习。
参考技术B 1、在Java6中,可以通过Process、ProcessBuilder 、Runtime.exec来调用其他程序,被调用程序作为子进程运行。Java程序可以通过stdio输入输出操作子进程,类似于控制台程序。

2、Java中操纵线程线程是用Thread类。

3、父子进程是由Win32 SDK中CreateProcess函数来指定的,Java实际上也是调用了这个API函数。因此你们老师会认为“父进程子进程只能用C语言”
参考技术C java通过线程的优先级来控制线程的先后执行概率,不过也不是绝对的。 java中有守护线程那么一说,当前台线程执行完后,才执行守护线程。

Java 并发 线程属性

Java 并发 线程属性

@author ixenos

 

 

线程优先级


 

1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程

2.默认情况下,一个线程继承它的父线程的优先级

当在一个运行的线程A里,创建另一个线程B的时候,那么A是父线程,B是子线程。
当在一个运行的线程A里,创建线程B,然后又创建了线程C,这时候虽然B比C创建早,可是B并不是C的父线程,而A是B和C的父线程。

3.线程的优先级高度依赖于系统,当虚拟机依赖于宿主机平台的线程实现机制时,Java线程的优先级被映射到宿主机平台的优先级上!优先级个数也许更多也许更少(Java有10个优先级)

4.如果有几个高优先级的线程没有进入非活动状态,低优先级的线程可能永远也不能执行!因为每当调度器决定运行一个新线程时,首先会在具有高优先级的线程中进行选择,这样就可能会使低优先级的线程完全饿死。

 

 

守护线程


 

1.守护线程的唯一用途是为其他线程提供服务(计时线程就是一个例子)

2.当只剩下守护线程时,虚拟机就退出了

3.守护线程应该永远不去访问固有资源(文件、数据库),因为它会在任何时候发生中断

4.调用 t.setDaemon(true); 将线程转换为守护线程

 

 

未捕获异常处理器


 

1.线程的run方法不能抛出任何被检测的异常,但是不被检测的异常会导致线程终止!但我们不需要任何catch子句去处理异常,因为在线程死亡之前,异常被传递到一个用于未捕获异常的处理器

2.(未完待续 Thinking in Java)

 


以上是关于java是不是存在父线程子线程之说的主要内容,如果未能解决你的问题,请参考以下文章

Java中是否父线程阻塞后子线程就无法继续执行?

父线程 在创建了子线程后,是否继续执行自己的代码?它可以在子线程结束前 结束吗?

java多线程信息共享

线程编程之父子线程(java编程)

java线程Thread的join方法。

Java中如何实现父线程如何获得子线程数据?