代码如下

private static Thread mTaskThread = new Thread(new Runnable() {@Overridepublic void run() {count++;System.out.println("this is time do task:" + count);}
});public static void main(String[] args) {for (int i = 0; i < 10; i++) {mTaskThread.start();}
}

如上运行程序发现,线程只会执行一次,并会有异常提示。查看Thread源码

 /*** Starts the new Thread of execution. The <code>run()</code> method of* the receiver will be called by the receiver Thread itself (and not the* Thread calling <code>start()</code>).** @throws IllegalThreadStateException - if this thread has already started.* @see Thread#run*/
public synchronized void start() {checkNotStarted();hasBeenStarted = true;nativeCreate(this, stackSize, daemon);
}private void checkNotStarted() {if (hasBeenStarted) {throw new IllegalThreadStateException("Thread already started");}}

可以看出Thread会检查是否执行过,如果已经执行过则会抛出异常。

那么如何使创建的线程可以执行多次呢?

private static void runTask() {new Thread(new Runnable() {@Overridepublic void run() { count++;System.out.println("this is time do task:" + count);}}).start();
}public static void main(String[] args) {for (int i = 0; i < 10; i++) {runTask();}
}

这样的操作线程会执行多次,但是每次执行线程对会重新创建线程对象,虽然任务结束后,垃圾回收器会回收对象,但是如果线程执行多次,频繁的创建对象,回收对象会影响运行效率,还有可能因对象来不及回收产生垃圾内存,这样严重影响性能。如何才能够避免可以重复执行线程,而又不影响效率,可以用线程池来执行。

private static ExecutorService mExecutor = Executors.newSingleThreadExecutor();
private static void runTask() {if (mTaskRunnable == null) {mTaskRunnable = new Runnable() {@Overridepublic void run() {count++;System.out.println("this is time do task:" + count);}};}mExecutor.execute(mTaskRunnable);}
public static void main(String[] args) {for (int i = 0; i < 10; i++) {runTask();}
}

运行显示,多次执行了线程的任务。

开启Thread线程只执行一次相关推荐

  1. Go的sync.Once(三):once.do(函数名)  函数只执行一次

    Once once.do(函数名)  函数只执行一次!执行一次后,其他协程不执行了 // 用once可以保证上面的oncebody被执行一次 package mainimport ("fmt ...

  2. 避免showModalDialog打开的窗口Page_Load只执行一次

    当showModalDialog打开的窗口Page_Load只执行一次,导致 if (!IsPostBack){} 中代码没有执行,查了相关资料,原因在于第一次之后加载都是从缓存中直接获取之前的页面, ...

  3. php多个请求只执行一次,php使用redis的blPop/brPop,一台服务器多个并发,也只能一次一次执行?...

    服务器是使用 nginx + php-fpm 的架构,redis用的是connect来连接,每个网络请求应该都会有单独的 php-fpm 进程.我写了一个循环,每次循环都有 blPop/brPop 和 ...

  4. vue animate bounceInRight 只执行一遍

    touchMove 中左滑 添加bounceInRight ,动画只执行一遍,或者只有某个有动画 解决:第一步:数据出现比动画要慢 在touchEnd中增加延迟,把类名置位空 第二步:把增加bounc ...

  5. css 页面从左侧向右滑入,动画只执行一次

    简单实现了页面进入时的动画: (1)从左侧滑入: (2)只执行一次. <template><div class="big_screen_contant">& ...

  6. python 为什么只执行一次_python只执行一次

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! #!usrbinpython #coding=utf-8 created on ...

  7. ansible 命令只执行一次

    RUN ONCE 通过run_once: true来指定该task只能在某一台机器上执行一次. 可以和delegate_to 结合使用 - command: /opt/application/upgr ...

  8. shell 脚本中 while 只执行一次

    实例代码 while read line ; do ssh -p20002 $line -o StrictHostKeyChecking=no xxxxxxxxx done < ip.txt w ...

  9. Jmeter如何在大并发测试下,让登录或者后续接口只执行一次?

    这个问题网上的答案其实很多,但是大多不靠谱. 比如推荐使用仅一次控制器,但是仅一次控制器对线程组无效:比如推荐跨线程组调用,但是这样比较繁琐,新人也搞不定: 其实只要对元件熟悉,这个问题很简单,只需要 ...

最新文章

  1. 固件模块之间的关系 C语言里面的模块
  2. mongoDB 删除集合后,空间不释放的解决方法
  3. 维吉尼亚密码(Vigenère Cipher)
  4. 皮一皮:高手。。。真是高手
  5. DOS获取局域网内所有正在使用的ip地址
  6. python3 isinstance用法_对python中assert、isinstance的用法详解
  7. python装饰器使用多吗_对于Python装饰器使用的一些建议
  8. .NET常用功能和代码[总结与收藏] (转)
  9. 常见的几种异常类型-熟记
  10. SIP协议(基础技术知识)
  11. JAVA入门级教学之(classpath的配置)
  12. 如何安装python3_linux如何安装python3
  13. 华为Mate 30 Pro全新配色曝光:“赤茶橘”颜值超高
  14. 6-SqlMapConfig.xml配置文件
  15. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了
  16. 设置,获取和删除Cookies
  17. php 使用gd库,PHP的gd库使用基础教程
  18. Java实现MySql分页查询
  19. 案例研究:手机APP的UI设计流程
  20. C++核心准则T.61:不要过度参数化成员(SCARY)

热门文章

  1. Eclipse发布MicroProfile 1.4和2.0
  2. 判断是不是一个数组?
  3. 手机短信验证码真的安全吗?
  4. C#实现身份证号码验证的方法
  5. 首款移动社交购物平台“商宝”上线发布
  6. jquery ajax中使用jsonp的限制[转]
  7. python:进程操作
  8. ”图书馆助手“典型用户和用户场景
  9. 怎样加入� android private libraries 中的包的源码
  10. 设计模式05-建造者模式