❶ java多线程中的死循环
ss.accept();方法在没有客户端连接时会进入阻塞状态,所以循环到这步时代码就不再执行了等待客户端连接,所以不会死循环.普通的方法,肯定会循环执行到死...
❷ Java编程里面死循环推荐使用吗
看情况了,如果能不用死循环的话还是尽量不用。因为控制不好程序就会出现大量占用CPU的情况
但是有时经常不得已需要用的,比如服务器每段间隔取执行某个任务,就可以用线程加死循环实现的,每次执行完后线程休眠休眠一段时间再执行,这是很常用的办法。由于线程执行完后会休眠,所以不会出现cpu大量占用。不过需要注意线程的数目。
重要还是看需求,需要了就用。
❸ 一个java程序,执行之后老是会出现死循环,烦请大神解答
你在主线程里面的while(true) 导致死循环了,起码你要在里面执行一条稍微好时间的语句,或者加上
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
让程序暂停一下,再循环
❹ java多线程中的死循环
是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,Socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由JVM调配,而不是按照代码编排的先后顺序了。
另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常Socket.accept()是该放进一个死循环的,也就是你的while(true);
❺ Java线程加了死循环,但异常终止,可能是什么导致
ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行
❻ java死循环会把电脑烧了吗
遇到死循环不会烧掉电脑,只会让电脑卡
开发java项的过程中,遇到java死循环是在所难免的,有经验的java工程师能够立马解决这种问题,但是新手就未必了,java死循环不会把电脑烧了,死循环占你内存,电脑会卡的不行。死循环的原因一般都是线程A先获得对象锁时,由于while循环,线程A一直在while空循环中。而线程B也因为无法获得锁而执行不了methodB()。因此如果在一个线程在synchronized方法中无法退出,无法将锁释放,另一个线程就只能无限等待了
❼ java 如何停止一个死循环
java 停止一个死循环,可以使用break关键字,跳出循环,如下代码:
packagecom.qiu.lin.he;
publicclassCeshi{
publicstaticvoidmain(String[]args){
for(inti=2;i>0;i++){
if(i==80){
System.out.println("死循环退出了");
break;
}
}
}
}
运行结果如下:
❽ Java中一个线程执行死循环有什么后果
总结:若线程A先获得对象锁时,由于while循环,线程A一直在while空循环中。而线程B也因为无法获得锁而执行不了methodB()。
可以看出,如果在一个线程在synchronized方法中无法退出,无法将锁释放,另一个线程就只能无限等待了。
❾ java多线程死循环
如果你对一个线程 start 了,那你的程序中实际上有两个线程,还有一个main
当前线程是main的子线程,实际上运行时,子线程start以后,main的方法还是会继续往下执行,直到退出,当main退出以后,子线程也就死了,当你将死循环写在子线程里,相当与子线程死掉了,但不影响主线程的执行,主线程遇到退出一样退出了程序,当你写在主线程里的死循环,那就在那里循环,因为它没有退出语句 System.exit(0); 或者执行到了最后一个大括号
❿ 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("服务器未开户或己关闭~"); } } }