面试总结

在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();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值