在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。
第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。
wait和sleep区别
区别一:
sleep是Thread类的方法,是线程用来 控制自身流程的,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。
wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。
区别二 :
关于锁的释放 ,在这里假设大家已经知道了锁的概念及其意义。调用sleep方法不会释放锁(自己的感觉是sleep方法本来就是和锁没有关系的,因为他是一个线程用于管理自己的方法,不涉及线程通信)
import java.net.*; // TCP/IP Socket编程所用包
import java.io.*;
public class TCPServer{
public static void main( String[] args ) throws Exception {
ServerSocket ss = new ServerSocket(6666); // 新申请一个sever的端口, 一般用1024以上,因为之下的可能会被系统随时调用.
while(true){
Socket s = ss.accept(); // 插口接受信息. 是阻塞方式的, 如果没有就会一直等待
// 得异步方式的来做, 否则这样的话 就会浪费时间
System.out.println("A client connected!");
InputStream is = s.getInputStream(); // 接受消息
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF()); // 打印从客户端发来的消息, 当然readUTF也是阻塞式的, 没有则一直等待.
// readUTF 是阻塞式的..
dis.close(); // 关闭数据输入流
s.close(); // 关闭当前的端口..
}
}
}
TCPCllient.java:
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main( String[] args ) throws Exception{
Socket s = new Socket("127.0.0.1", 6666);
// Socket(String host, int port); server的ip, 和对应的端口号. 以区分具体主机上的某个程序..
// 数据出处, 从端口的outputstream上向外送数据
OutputStream os = s.getOutputStream();
//Thread.sleep(30000); // 这个为了测试, readUTF是阻塞式的
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("hello server!");
dos.flush();
dos.close();
s.close();
}
}
分享到:
相关推荐
陈涛后端面试总结 这篇文章总结了数字IC后端的一些重要问题,涵盖了电源走线的选择、交替路由的应用、线间干扰的解决、标准单元延迟的影响因素、禁止使用库中某些单元、wire load model的类型、延迟模型的类型、...
这份"10万字面试总结Java.pdf"涵盖了Java基础知识、JVM、Spring框架、并发编程、Linux、Dubbo、Mybatis、Springcloud、Spring Boot、消息队列和Zookeeper等多个核心主题,旨在帮助Java开发者全面准备面试。...
### 阿里面试总结及答案 #### 一、Java事件机制 Java事件机制是Swing框架中的核心组件之一,它允许程序响应用户输入或其他事件。该机制主要包括三个方面:事件、事件监听器以及事件源。 - **事件**:通常继承自`...
在进行《我想进大厂》的面试总结时,我们首先要了解面试对于求职者和招聘方的重要性。面试不仅仅是一个考核和选择的过程,它也反映了求职者的职业素养、技术能力、沟通技巧和解决问题的能力。而对于面试官而言,面试...
全网最全-谷粒商城项目-面试总结-简历优化_Java-You的博客-CSDN博客 .html
2020年上海JAVA开发工程师面试总结
阿里巴巴面试总结DOC版 本资源摘要信息主要总结了阿里巴巴面试中的问题和答案,涵盖了 Java 编程语言、设计模式、JVM 内存模型、ClassLoader 结构、UML 模型图、OSGi 框架、Spring 框架、iBatis 框架、Java 序列化...
本文档是关于软件工程师程序员Java面试题和答案的总结,涵盖了Java语言的特点、面向对象和面向过程的区别、基本数据类型、标识符的命名规则、instanceof关键字的作用、Java自动装箱与拆箱等知识点。 一、Java语言的...
Java面试总结面试总结PDF
面试总结
面试总结
在2018年的秋季招聘中,iOS面试成为众多求职者关注的焦点。这个时期的面试不仅反映了当时的iOS技术趋势,也为后来的求职者提供了宝贵的参考经验。以下是对2018年秋招iOS面试中常见知识点的详尽解析: 1. **...
【标题】:“面试录音&面试总结.zip”是一个包含面试过程记录和回顾的压缩文件,它可能包括了求职者与招聘方的对话音频以及面试后的个人反思和总结文档。这类文件对于求职者来说是宝贵的资源,可以帮助他们分析面试...
### 图像面试总结 在近期参加的一系列技术面试过程中,遇到了不少与图像处理相关的技术问题。为了更好地总结经验,本文将对这些面试中涉及到的知识点进行详细的归纳与解析。 #### 1. 指针与图像数据结构 面试中...
【西安2010Java面试总结】 在2010年的西安Java面试中,面试官主要关注以下几个核心知识点,这些内容对于Java开发者来说至关重要,也是面试官用来评估候选人技术实力的关键标准。 1. **Java基础知识**:面试通常从...
【创迹面试总结】 面试是求职过程中的关键环节,它不仅是公司评估求职者能力与适应性的途径,也是求职者展示自身素质和专业素养的机会。在创迹面试中,面试官通常会关注以下几个方面: 1. **项目经验**:面试官会...
Java面试大全涵盖了大量的技术知识点,这些内容通常会出现在各大公司的面试过程中。为了帮助你更好地准备,以下是基于描述中提到的“31个文档”可能涉及的一些核心Java面试知识点的详细阐述: 1. **基础概念**:...
【Java开发面试总结】 在Java开发的面试过程中,面试官通常会关注候选人的技术栈是否广泛且深入。这里,我们重点讨论几个关键知识点,包括前端技术、JavaScript、Ajax、Java基础以及Web开发框架。 1. **前端开发...
这份面试总结涵盖了从人力资源面试到专业技能测试的关键点,旨在帮助应聘者充分准备。以下是一些重要的知识点: 1. **HR面试**: - 自我介绍:清晰地表述个人背景、教育经历和相关工作经验,展示与职位相关的技能...