java线程循环
① java—for循环里启动的线程要怎么理解
首先类继承Thread或者实现了Runnable接口,程序就知道这是一个线程类,每次new 一个线程类,相当于创建了一个新的线程对象,使用start是启动一个线程,线程处于就绪状态,而run方法属于线程体;
如此在循环体中循环了20次,创建了20个不同的线程,每次都使用了start方法,也就是启动了20个不同的线程;
左上角有我头像,欢迎来学习交流;
② java多线程无限循环的问题
这个问题我建议你在while中加入一个检查的语句,比如下面的
while(true){
if(x>0){
System.out.println(x--);
}
System.out.println("**"); //这块地方,你可以加点什么,让程序打印出内容,用以判断
}
你这样试下后你就会发现问题的,推荐你动手做下
③ java多线程死循环
如果你对一个线程 start 了,那你的程序中实际上有两个线程,还有一个main
当前线程是main的子线程,实际上运行时,子线程start以后,main的方法还是会继续往下执行,直到退出,当main退出以后,子线程也就死了,当你将死循环写在子线程里,相当与子线程死掉了,但不影响主线程的执行,主线程遇到退出一样退出了程序,当你写在主线程里的死循环,那就在那里循环,因为它没有退出语句 System.exit(0); 或者执行到了最后一个大括号
④ Java多线程问题 子线程无限循环导致主线程无法执行
我测试了一下,这个判断语句是已经执行了,就在第一句语句之前进行的,不信可以把if判断去掉,程序就一句也不执行。说明什么,说明这个语句exit已经执行,不过,对于线程的终结应该是在线程的循环内部进行定义,在线程的外部限制,好像不合适。
classLeftextendsThread{
intn=0;
publicvoidrun(){
while(n<=8){
n++;
System.out.printf(" %s","Left");
System.out.print(n);
try{
sleep((int)(Math.random()*100)+100);
}
catch(InterruptedExceptione){}
}
}
}
⑤ java线程没有循环完成就终止了,这是为什么
sleep一秒钟之后,上面线程的循环还没有完成,比方说只循环到630的时候,一秒钟就结束了,然后你就打印输出了,自然是没有2000个
⑥ 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线程for循环没有循环完成就停止了,这是为什么
多线程需要基础学好点。在来开发,否则总有莫名其妙的事情冒出来。而自己无法解释。
你这个问题很简单。
你要main主线程1秒后输出list集合数据。在你代码中这写法本身是错误的,因为你有2个子线程,有锁,安全地往list中加2千个数据,却每次要等待1毫秒,估算2千数据你程序的加完需要2秒多时间,在1秒后,子线程还没有结束,大概1千个数据还没加完呢,你主线程就输出了当前数据。肯定结果不对。哪来的2千个数据呢。你说循环没完成就停止了,说法完全错误。。。
你要main主线程输出list集合数据。正确操作应该是:
Thread t1 = ...;
t1.start();
t2也是如此。
最后main线程下面,输出list数据前加2行代码
t1.join();
t2.join();
然后在打印list。
join方法意思很简单。就是等待线程结束后,我再继续。main线程等待了2个子线程都结束后,即保证数据全部进list后,打印结果。
⑧ java多线程中的死循环
是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,Socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由JVM调配,而不是按照代码编排的先后顺序了。
另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常Socket.accept()是该放进一个死循环的,也就是你的while(true);
⑨ JAVA多线程里的循环耗时
这里你要改变下思维方式。虽然物理上是两个独立事件(开枪和子弹飞),但是计算机在绘图的时候,启示是一帧帧画上去的。所有的事件都是由连续帧绘制出来的。因此,只需要一个线程就可以了:
publicvoidrun(){
intt=0;
while(flag){
intbullet_time=t%600;
//fire
if(bullet_time==0){
//drawfireevent
}
else{
//drawbullets
switch(bullet_time){
case100:
//drawbullet1
break;
//drawbullet2
case200:
break;
//drawbullet3
case300:
break;
//drawbullet4
case400:
break;
//drawbullet5
case500:
break;
}
}
t+=100;
try{Thread.sleep(100);}catch(Exceptione){e.printStackTrace();}}}
⑩ Java中一个线程执行死循环有什么后果
有两个线程在并发运行,一个线程执行的代码中含有一个死循环如:while(true)....当该线程在执行while(true)中代码时,另一个线程会有执行。
一.示例代码:
总结:若线程A先获得对象锁时,由于while循环,线程A一直在while空循环中。而线程B也因为无法获得锁而执行不了methodB()。
可以看出,如果在一个线程在synchronized方法中无法退出,无法将锁释放,另一个线程就只能无限等待了。