JAVA线程生命周期

  在大三做我的大创项目的时候,当我的服务器端开启监听客户端请求的线程时,主界面无法出来。

  相信大家都知道,发生了进程抢占就会出现这种情况。但是我当时就郁闷了,明明我开了一个子线程的,为什么会和主线程发生抢占呢?经过研究,我发现我的线程启动函数用的Thread.run()。当我把run改为Thread.start()后,问题就解决了。这时,让我们通过这个事情来看看线程的运行机制吧。

  如上图所示,线程分为5个状态。新建,就绪,运行,死亡,阻塞。

新建:进程刚刚新建,new

就绪:线程可以运行了。start()函数就表面线程可运行了,但是还没有运行。当在阻塞状态下,阻塞条件解决了也转为可运行状态。

运行:线程运行。进入运行的唯一方式,调用函数run()。

阻塞:就是线程被某种原因停止了,需要解决了某种原因才能运行。解决了后转为就绪状态。可调用sleep(),yieid(),join()方法来使其停止或暂停。

死亡:当run()方法执行完了后,线程自动死亡。要让一个线程死亡,不要用Stop(),最好不要让while()一直循环,break出来,让run方法执行完,线程就正常死亡了。或者当线程状态处于阻塞状态时,调用interrupt。

这个博客写的相当详细 http://blog.csdn.net/lonelyroamer/article/details/7949969

我的那个问题,就是因为我用的是run(),让线程开始执行,accept()方法在等待客户端连接。而start()就是让其进入等待状态,当界面显示出来再执行。就不会使主界面出不来

时间: 2024-10-08 20:04:30

JAVA线程生命周期的相关文章

Java学习之==>Java线程生命周期与状态切换

一.Java线程生命周期与状态切换 这些状态的描述可以总结成下图: NEW 一个刚创建但尚未启动的Java线程实例就是处于 NEW 状态 public class App { public static void main(String[] args) { Thread thread = new Thread(); Thread.State state = thread.getState(); System.out.println(state); } } // 输出结果 NEW RUNNABLE

Java 线程生命周期

2.线程的生命周期 与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. // 开始线程 publicvoid start( ); publicvoid run( ); // 挂起和唤醒线程 publicvoid resume( );     // 不建议使用 publicvoid suspend( );    // 不建议使用 publicstaticvoid s

java线程生命周期图解

版权声明:本文为博主原创文章,未经博主允许不得转载.

这么理解线程生命周期,是不是很简单?

| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star?? 为什么要了解线程的生命周期? 之前写过 Spring Bean 生命周期三部曲: Spring Bean生命周期之缘起 Spring Bean生

Java多线程与并发——线程生命周期和线程池

线程生命周期:  线程池:是预先创建线程的一种技术.线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用.减少频繁的创建和销毁对象. java里面线程池的顶级接口是Executor,是一个执行线程的工具. 线程池接口是ExecutorService. java.util.concurrent包:并发编程中很常用的实用工具类 Executor接口:执行已提交的Runnable任务的对象. ExecutorService接口:Executor提供了管理终止的方法,以

java基础——线程的常用方法和线程生命周期

线程的常用方法 package thread; /* 测试Thread类中的常用方法: 1.start() 2.run():重写Thread方法,将线程要执行的操作声明在方法中 3.Thread.currentThread():静态方法,返回执行当前代码的线程 4.getName():获取当前线程的名字 5.setName():设置当前线程的名字 6.yield():当前线程交出cpu执行权 7.join():在线程a中调用线程b的join方法,此时线程a进入阻塞态,直到线程b完全执行完后,a才

多线程(四)线程生命周期和线程池

一.线程生命周期 线程的5种状态: 新建(New) ,就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)     线程生命周期图: 二.线程池 1.为什么要使用线程池: (1).提高性能 系统启动一个新线程的成本是比较高的,而使用线程池避免了频繁的创建和销毁线程,可以很好地提高性能. 线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会自动 启动一个线程来执行它们的run()或call()方法,

线程八大基础核心四(线程生命周期)

1.引子 在java多线程并发编程中,有八大基础核心.考考你:看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第四个基础核心开始:线程生命周期 2.考考你 #前情回顾: 在java编程语言中,从线程创建,到线程执行结束,会经过一系列状态的转化,称为线程的生命周期 #考考你: 1.你知道线程生命周期中有哪些状态吗? 2.你知道各种状态对应的含义吗? 3.一图胜

线程生命周期

线程的生命周期:一个线程从创建到消亡的过程 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为五个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态[runnable]: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法, 这样就使得该线程处于可运行状态(Runnable). 这一状态并不是运行中状态(Running),因为