Ⅰ java中线程的几种可用状态有哪些请大家解释一下。
我理解的有5种:
1、创建,刚创建出线程对象,比如new Thread()
2、就绪,调用了start方法,但内此时并不是调用就立马被运行,容在这期间要让cpu执行你,在等待执行过程叫就绪也叫等待。cpu并不是立马执行,而是串行以极快速度切换进程的运行着
3、运行,正在运行了,创建出线程,脱离了主线程,进入run,天高任鸟飞
4、死亡,异常终止,或run执行完毕
5、阻塞,运行过程中,交出cpu执行权休眠。为什么要休眠?某些某些特定的条件等待条件成熟,这时候手动让线程休眠进入阻塞状态
线程之间但状态是可任意转换的,阻塞醒来就是就绪,运行中又阻塞,就绪运行死亡,等状态可切换。
还有一种是进程的状态
1、就绪,创建子进程,等待cpu调度执行
2、运行,运行程序
3、僵尸,运行完毕死亡等待收尸
3、暂停,被信号暂停,等待信号唤醒
4、阻塞,等待条件成熟,人为休眠。条件满足或唤醒
进程和线程状态,非常类似
Ⅱ java 后台线程自己断掉一般是什么由原因引起的
1.所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序回一开始启动时创建的答那个线程)不会是守护线程.
2.Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。
虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
3.Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下.
如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来.
4.总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程.
5.默认产生的线程全部是Non-daemon线程.
Ⅲ java多线程死循环
你程序是:
服务端有不断的向客服端写信息,客户端有不断的读来自服务端的信息。
但是反过来,客户端没有不断的向服务端写信息。服务端也没有不断的读来自客户端的信息。
用线程解决:
在客户端新加一条线程,专门用来读取来自服务端的信息。
在服务端新加一条线程,专门用来读取来自客户端的信息。
而在各自的main()函数中只负责不断接收system.in信息,然后发送信息..
其实不用线程的。。我也改了下,改的好像较多。
运行步骤:
开server端,开kehu端。客房端先写入信息。。然后,你一句我一句。只能按这顺序。。这就是没用线程的结果。
代码如下:
服务端:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args)
{
System.out.println("我是服务器");
try {
ServerSocket ss=new ServerSocket(8000);
Socket sk=ss.accept();
OutputStream os=sk.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
bw.write("你好,我是服务器,有什么需要我服务的嘛?\n");
bw.flush();
InputStream is=sk.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
while(true)
{
String str=br.readLine();
if(str.equals("bye")||str==null)break;
System.out.println("客户端说:"+str);
String sr="";
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
sr=br1.readLine();
bw.write(sr+"\n");
bw.flush();
}
}
catch (Exception e) {
System.out.println("客用户机己断开");
}
}
}
客户端:
import java.net.*;
import java.io.*;
public class kehu {
public static void main(String[] args)
{
System.out.println("我是客户");
try {
Socket s=new Socket(InetAddress.getByName(null),8000);
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
OutputStream os=s.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
String sr="";
while(true)
{
sr=br.readLine();
if(sr.equals("bye")||sr==null)break;
System.out.println("服务器说"+sr);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
sr=br1.readLine();
bw.write(sr+"\n");
bw.flush();
}
} catch (Exception e) {
System.out.println("服务器未开户或己关闭~");
}
}
}
Ⅳ java多线程死循环
如果你对一个线程 start 了,那你的程序中实际上有两个线程,还有一个main
当前线回程是main的子线程,实际上运答行时,子线程start以后,main的方法还是会继续往下执行,直到退出,当main退出以后,子线程也就死了,当你将死循环写在子线程里,相当与子线程死掉了,但不影响主线程的执行,主线程遇到退出一样退出了程序,当你写在主线程里的死循环,那就在那里循环,因为它没有退出语句 System.exit(0); 或者执行到了最后一个大括号
Ⅳ Java中一个线程执行死循环有什么后果
总结:若线程A先获得对象锁时,由于while循环,线程A一直在while空循环中。而线程B也因为无法获得锁而执行不了methodB()。
可以看出,如果在一个线程在synchronized方法中无法退出,无法将锁释放,另一个线程就只能无限等待了。