原先多线程并发编程的学习笔记和代码整理一下贴上来。
---------------------------------
线程创建与线程池
一、线程创建
创建一个线程的方式有2种,一种是直接重写Thread类的run方法,另一种是实现Runnable接口重写run方法,然后传入Thread构造函数的方式启动。
1、直接使用Thread方式:
class InnerThreadTask{ private Thread t; private String name; private int i=5;//每个线程执行5次 public InnerThreadTask(String name){ this.name=name; } public void runTask(){ t=new Thread(name){//匿名内部类继承Thread类 public void run(){//重写run方法 while(true){ System.out.println("name="+this.getName()+" i="+i); if(--i==0)return; } } }; t.start();//启动 } }
然后执行new InnerThreadTask("InnerThread").runTask();即可启动线程。
2、实现Runnable接口方式:
class InnerRunnableTask{ private Thread t; private String name; private int i=3;//每个线程执行3次 public InnerRunnableTask(String name){ this.name=name; } public void runTask(){//匿名内部类实现Runnable接口 t=new Thread(new Runnable(){//new Thread(Runnable r,String name); public void run(){//重写run方法 while(true){ System.out.println("name="+Thread.currentThread().getName()+" i="+i); if(--i==0)return; } } },name); t.start();//启动 } }
然后执行new InnerRunnableTask("InnerRunnable").runTask();即可启动线程。
二、线程池
JavaSE5新增的java.util.concurrent包中的Executors类提供了几种线程池,使得创建和管理线程更加方便。
1、CachedThreadPool:
JDK文档:创建一个根据需要创建新线程的线程池,但在以前构造的线程可用时将重用它们。
意思就是线程池内的线程可以被复用。
举例:先定义一个task。
class CachedTask implements Runnable{ private int i=10;//每个线程执行10次 public void run(){ while(true){ System.out.println("ThreadName="+Thread.currentThread().getName()+" i=" + i); if(--i==0) return; } } }
打印10遍线程名。
创建CachedThreadPool:
ExecutorService exec=Executors.newCachedThreadPool(); for(int i=10;i>0;i--){ exec.execute(new CachedTask());//执行给定的线程。 } exec.shutdown();
此处使用Executors类创建出CachedThreadPool线程池,同时执行10个线程,每个线程执行10次。
exec.shutdown();关闭线程池,防止新任务被提交。但会继续执行shutdown以前提交的全部任务,且不接受新任务。
2、FixedThreadPool:
JDK文档:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。
意思就是可以限制线程池内线程数的个数,如果任务数超过了线程数,后面的任务就会以队列的方式来等待。
举例:同样先定义一个task:
class FixedTask implements Runnable{ private int i=1; public void run(){ while(true){ System.out.println("ThreadName="+Thread.currentThread().getName()+" i=" + i); if(--i==0) return; } } }
每个线程打印1遍线程名。
创建FixedThreadPool:
ExecutorService exec = Executors.newFixedThreadPool(5); for(int i=10;i>0;i--){ exec.execute(new FixedTask()); }
注意,此处限定了线程数最大为5,同时执行10个任务。如果前5个任务没有执行完,则后面的任务会一直等待到有可用的线程。
3、SingleThreadExecutor:
JDK文档:创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程。
SingleThreadExecutor是只有单个线程的执行器,可以理解为线程数量为1的FixedThreadPool。
可以把SingleThreadExecutor当做一个FIFO队列来使用。
举例:定义task
class SingleTask implements Runnable{ private int i=10; public void run(){ while(true){ System.out.println("ThreadName="+Thread.currentThread().getName()+" i=" + i); if(--i==0) return; } } }
打印10遍线程名字。
创建SingleThreadExecutor:
ExecutorService exec = Executors.newSingleThreadExecutor(); for(int i=5;i>0;i--){ exec.execute(new SingleTask()); }
这里通过执行可以看出,在每个线程执行完后,才会执行下一个线程。
相关推荐
并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池
不了解并发编程和线程池的开发者可能会面临多线程竞争、死锁等问题。通过深入了解 Java 并发编程和 JUC 线程池,您可以更好地管理线程之间的协作和同步,充分发挥多核处理器的优势,确保程序稳定运行。 了解 Java ...
Java并发编程:线程池的使用 - 平凡希 - 博客园平凡希博客园首页联系管理随笔 - 127 文章 - 1 评论 - 94Java并发编程:线程池的使用在前面
本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程的创建和管理,以及线程间通信的基本方法。通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多...
Java并发编程:设计原则与模式(第二版).pdf
Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的...
Java并发编程:设计原则与模式(第二版)
Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-...
Java并发编程:设计原则与模式(第二版)
java并发编程:设计原则与模式.rar
Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等示例,列出一些源码包中包括的内容: volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小...
Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-...
第二部分引入了ClassLoader,这是因为ClassLoader与线程不无关系,我们可以通过synchronized关键字,或者Lock等显式锁的方式在代码的编写阶段对共享资源进行数据一致性保护,那么一个Class在完成初始化的整个过程到...
高并发和并发编程并发编程:线程安全+线程封闭+线程调度
23 高并发编程和线程池,教程视频:java中高并发编程和线程池
Java并发编程:设计原则与模式Java并发编程:设计原则与模式
C++并发编程实战 示例源源码 (C++ Concurrency in Action)
《Java并发编程从入门到精通》内容包括并发编程概念,线程,线程安全,线程集合类,线程阀,线程池,Fork/Join,线程、线程池在互联网项目开发的应用,线程监控及线程分析,Android中线程应用。 本书适合Java开发...