关于线程池与匿名对象的执行先后顺序

问题描述

importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;classPerson{publicPerson(){System.out.println("*****我要先出来*****");}}publicclasstestdemo01{publicstaticvoidmain(Stringargs[]){for(inti=0;i<20;i++){ExecutorServiceps=Executors.newSingleThreadExecutor();ps.execute(newRunnable(){publicvoidrun(){try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}System.out.print("0");}});}newPerson();}}

问题1:为何匿名对象会出现在for循环中的打印前面?java不是一行一行执行的吗?问题2:程序运行后,出现了线程死锁,无法退出,如何解决?谢谢各位大哥大姐了!!!祝我早日结贴!

解决方案

解决方案二:
1。对于单线程是java是一行一行的执行,而你这个多线程,谁知道先执行那个。2。你不关闭它怎么退出。ExecutorServiceshutdown()
解决方案三:
importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;classPerson{publicPerson(){System.out.println("*****我要先出来*****");}}publicclasstt{publicstaticvoidmain(Stringargs[]){for(inti=0;i<20;i++){ExecutorServiceps=Executors.newSingleThreadExecutor();ps.execute(newRunnable(){publicvoidrun(){try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}System.out.print("0");}});ps.shutdown();}newPerson();}}OK
解决方案四:
多线程会先执行哪个说不定的.
解决方案五:
问题1:为何匿名对象会出现在for循环中的打印前面?java不是一行一行执行的吗?问题2:程序运行后,出现了线程死锁,无法退出,如何解决?你把线程放在for循环里面的啊,java线程不是一行一行执行的,执行顺序是不同的随机的出现死锁是由于多个线程强用同一个资源,为了实现线程同步,需要在对对象加锁!若是想要退出就按住Ctrl+C

时间: 2024-11-06 22:57:21

关于线程池与匿名对象的执行先后顺序的相关文章

java concurrent包自带线程池和队列详细讲解

Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用.为我们在开发中处理线程的问题提供了非常大的帮助.二:线程池线程池的作用:线程池作用就是限制系统中执行线程的数量.     根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资

java自带线程池和队列详细讲解(Java线程池使用说明)

一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用.为我们在开发中处理线程的问题提供了非常大的帮助. 二:线程池 线程池的作用: 线程池作用就是限制系统中执行线程的数量.     根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系

new Thread的弊端及Java四种线程池的使用

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次ne

几种java线程池的实现算法分析

1. 前言 本文发表与infoq,因版权属于个人顾再此转载. 在阅读研究线程池的源码以前,只知道如何使用,不了解其内部实现的具体细节,一直感觉是非常高深的技术,研究后才发现,线程池的实现是如此精巧.本文从技术角度分析了线程池的本质原理和组成,同时分析了JDK.Jetty6.Jetty8.Tomcat的源码实现,对于想了解线程池本质.更好的使用线程池或者定制实现自己的线程池的业务场景具有一定指导意义. 2. 使用线程池的意义 l 复用:类似WEB服务器等系统,长期来看内部需要使用大量的线程处理请求

Android 四种常见的线程池

引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecution

Android线程池的经典使用

今天要讲的东西就是线程池.线程的高效率使用,灵活控制!今天就用最常用的几种方式来分别实现应用中使用的线程方面的知识,(共写了两个不同入口的Activity来分开不同的实现方式,大家可以自行注释AndroidManifest.xml中的Launch入口或打开注释)任何发代码中的具体实现效果,好了,先随便列几个吧,如:AsyncTask.Runnable.Thread.ThreadPool.Executors等等的使用,看我文章的朋友应该都很清楚小马的方式啦,果断先上效果,再一步步分解代码. 源码下

Android线程池详解

引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 [html] view plain copy  print? public ThreadPoolExecutor(int corePoolSize,                                 int maximumPoolSize,                                 long keepAl

简单介绍Java编程中的线程池_java

从 Java 5 开始,Java 提供了自己的线程池.线程池就是一个线程的容器,每次只执行额定数量的线程. java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.它很灵活,但使用起来也比较复杂,本文就对其做一个介绍. 首先是构造函数.以最简单的构造函数为例: public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit uni

java 多线程和线程池

● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同时执行). 2)适当的提高了资源利用率(CPU.内存等). 缺点: 1)占用一定的内存空间. 2)线程越多CPU的调度开销越大. 3)程序的复杂度会上升. 对于多线程的示例代码感兴趣的可以自己写Demo啦,去运行体会,下面我主要列出一些多线程的技术点. synchronized 同步块大家都比较熟悉