同一个Thread启动第二次会报错java.lang.IllegalThreadStateException
来源:互联网 发布:冠道车钥匙淘宝图片 编辑:程序博客网 时间:2024/05/21 18:40
先实现Thread代码
public class TestThread { public static void main(String[] args) { for (int i = 0; i < 100; i++) { myThread.start(); System.out.println(myThread.getName() + "---" + i + "---"); } } static Thread myThread = new Thread(new Runnable() { int count = 0; boolean runable = true; public void run() { while (runable) { count++; try { Thread.sleep(100); } catch (Exception e) { } if (count > 100) { runable = false; } } } });}
运行结果:
Thread-0---0---Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start(Unknown Source) at TestThread.main(TestThread.java:6)
当第二次调用Thread.start()启动同一个线程时,报错。
采用Runnable实现,解决问题
public class TestRunnable { public static void main(String[] args) { for (int i = 0; i < 100; i++) { Thread t = new Thread(myRunnable); t.start(); System.out.println( t.getName() + "---" + i + "---"); } } static Runnable myRunnable = new Runnable() { int count = 0; boolean runable = true; @Override public void run() { while (runable) { count++; try { Thread.sleep(100); } catch (Exception e) { } if (count > 100) { runable = false; } } } };}
运行结果正常。可以启动多个线程
2016/8/16修改编辑
Thread报错的原因,并不是说,重新启动Thread导致的,而是因为共用一个Thread导致的,因为,如果是实现Runnable的类,每次启动线程都需要new Thread(Runnable).start(),这就使得线程没有被共用。所以,另外一种解决办法是如下:
public class TestThread { public static void main(String[] args) { for (int i = 0; i < 100; i++) {// TestThread t = new TestThread(); new TThread().start();// myThread.start();// System.out.println(myThread.getName() + "---" + i + "---"); } Thread.currentThread(); } }class TThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); System.out.println("111"); }}
只要每次都new 一个新的线程对象,就不会报错。
0 0
- 同一个Thread启动第二次会报错java.lang.IllegalThreadStateException
- Exception in thread "main" java.lang.IllegalThreadStateException
- java.lang.IllegalThreadStateException: Thread already started.
- java.lang.IllegalThreadStateException: Thread already started
- Thread问题:解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- 解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- 兔子--android开发中 java.lang.IllegalThreadStateException: Thread already started
- Android多线程之java.lang.IllegalThreadStateException: Thread already started
- 解决 java.lang.IllegalThreadStateException: Thread already started. 错误
- java.lang.IllegalThreadStateException 线程运行报错
- java.lang.IllegalThreadStateException翻译
- java.lang.IllegalThreadStateException
- java.lang.IllegalThreadStateException异常
- java.lang.IllegalThreadStateException问题解决
- java.lang.IllegalThreadStateException
- java.lang.IllegalThreadStateException
- java.lang.IllegalThreadStateException异常
- java.lang.IllegalThreadStateException异常分析
- Android封装支付宝支付
- 工作计划
- M1卡的工作原理
- Vacations
- 剑指OFFER:二维数组中的查找
- 同一个Thread启动第二次会报错java.lang.IllegalThreadStateException
- Android学习历程——高德地图学习开发之显示地图,定位
- Qt读写ini文件
- 项目中遇到的问题(笔记)
- hdu 3631 Shortest Path (floyd)
- HDOJ 5748 Bellovin(LIS)
- DOM事件处理程序
- Animation动画
- HDU 5723/2016多校1A Abandoned country