`
joker_zhou
  • 浏览: 6238 次
社区版块
存档分类
最新评论

Java并发学习笔记(2)在java中实现多线程的启动

 
阅读更多

直接继承Thread类
       直接继承Thread类并且覆盖重写run方法,然后new出此类使用start方法启动线程如下:

  1. public classMyThread extends Thread {  
  2.     @Override  
  3.     public void run() {  
  4.         while(true) {  
  5.             System.out.println("MyThread run()method");  
  6.         }  
  7.     }  
  8.     public static class Test{  
  9.         publicstatic void main(String[] args) {  
  10.             MyThreadt=new MyThread();  
  11.             t.start();  
  12.         }  
  13.     }  
  14. }  

 

(2)实现Runnable接口
    继承Thread的坏处显而易见继承Thread后不可以继承其他类,因为Java是单继承模式的.让我们看下Thread类的run方法原型原型如下:

  1. publicvoid run() {  
  2.    if (target != null) {  
  3.         target.run();  
  4.    }  
  5. }  

 

可以看到run方法调用的是target这个对象的方法,target的定义为private Runnable targetThread类的构造参数接受Runable所以可以使用Runable接口初始化Thread类启用strat方法启动线程实例如下:

 

  1. class MyR implements Runnable{  
  2.     @Override  
  3.     public void run() {  
  4.         System.out.println("MyRrun method");  
  5.     }    
  6. }  
  7. public classMyThread {  
  8.     public static voidmain(String[] args) {  
  9.         Thread t=new Thread(new MyR());  
  10.         t.start();  
  11.     }  
  12. }  

 

使用线程池启动一个任务

(1)使用Executors中的工厂方法可以创建一个线程池:

   newFixedThreadPool:创建一个定长的线程池,每当提交一个任务就创建一个线程,知道达到池的最大长度,这时线程池会保持长度不再变化

  newCachedThreadPool:创建一个可缓存的线程池,如果当前线程池的长度超过了处理的需要时,它可以灵活地回收线程,所以此线程池的长度没有限制.

  newSingleThreadPool:创建一个单线程化的executor,它只创建唯一的工作线程来执行任务,如果这个线程异常结束,会有另一个取代它,executor会保证任务依照任务队列所规定的顺序(FIFO,LIFO,优先级)执行.

         newScheduledThreadPool定长的线程池,而且至支持定时的以及周期性的任务执行.

    i.         ScheduledThreadPool在java5中已经取缔了Timer.配合DelayQueue可以实现各种延时,定时任务.

    1.        DelayQueue中的对象都实现了Delayed接口此接口只有一个方法getDelay(TimeUnit)方法.此方法返回延迟还有多少时间DelayQueue只会将此方法返回值                             为0或  者小于0的对象取出.如果没有小于等于0的将会阻塞.

(2)以上方法返回一个ExecutoServicer对象,ExecutorService扩展了Executor.下面介绍下ExecutorService

  a)        ExecutorService有3个状态:

    i.         运行.创建后的状态是运行.

    ii.       关闭.调用shutdown方法后ExecutorService将停止接受新提交的任务,同时等待已经提交的任务完成.

    iii.      终止.一旦所有任务完成就会进入终止状态.
    isTerminated可以检测关闭后是否所有任务都完成.

  b)       awaitTermination请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。

(3)Executor使用Runnable作为其任务的基本表达形式.Runnable不能返回一个值,或者抛出受检查的异常.很多任务是需要返回值的.比如数据库查询.这是就需要Callable接口它的call方法允许返回结果.FutureTask可以包装一个Runnable或者Callable然后使用Executor执行任务.也可以使用Submit提交Callable或者Runnable会返回一个Future对象.FutureTask对象执行一次将保存call返回的结果.第二次使用get方法返回和第一次无异.没有执行结束的FutureTask执行其get方法会阻塞.

(4)CompletionService:Executor+BlockingQueue

  a)        CompetionService的实现方法是ExecutorCompetionService,它的构造方法接受一个BlockingQueue<Future>参数或者使用submit提交任务,使用poll/take方法返回           一个已经完成任务的Future

(5)ExecutorService:invokeAll

  a)        List<Future> invokeAll(Collection<? extends Callable<T>>tasks, long timeout, TimeUnitunit)

  b)       执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。

分享到:
评论

相关推荐

    Java并发编程学习笔记 pdf 多线程编程

    Java并发编程学习笔记,...目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java并发编程学习笔记是作者在实际工作中的经验总结,一般来说,当你读完了前8章,你已经足以可以应对JAVA的多线程编程了。

    JAVA 多线程学习笔记

    这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...

    Java并发编程学习笔记.rar

    这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...

    Java并发编程学习笔记

    Java并发编程是Java开发中必不可少的一部分,涉及到多线程、同步机制、线程池以及并发工具类等多个核心知识点。以下是对这些主题的详细说明: 1. **线程安全与锁 Synchronized 底层实现原理**: 线程安全是指在多...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    Java并发编程学习笔记.

    Java并发编程是Java开发中的重要领域,它涉及到多线程、同步、锁机制、线程池等关键概念,是提高程序性能和效率的关键技术。在Java中,并发编程的运用可以充分利用多核处理器的能力,实现高效的多任务处理。以下是对...

    java多线程笔记

    在多线程环境下,多个线程可以并行地在单个进程中执行,使得程序能够同时处理多项任务。 Java中的线程是通过`Thread`类或实现`Runnable`接口来创建的。你可以直接继承`Thread`类并重写`run()`方法,或者创建一个...

    Java分布式应用学习笔记05多线程下的并发同步器

    ### Java分布式应用学习笔记05多线程下的并发同步器 #### 1. 前言 在现代软件开发中,特别是在分布式系统和高性能计算领域,有效地管理多线程之间的协同工作至关重要。Java语言提供了丰富的工具和API来帮助开发者...

    张孝祥Java多线程与并发库高级应用笔记

    张孝祥的Java多线程与并发库高级应用笔记涵盖了从传统线程技术到JDK1.5并发库的全面内容,不仅加深了对线程基本原理的认识,还介绍了现代Java并发编程的最佳实践。对于希望提升多线程编程技能的Java开发者来说,这是...

    多线程学习笔记

    多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...

    java线程学习笔记

    Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...

    java并发编程学习笔记

    ### Java并发编程学习笔记知识点详解 #### 一、Java并发编程概述 Java并发编程是指在Java应用程序中同时执行多个操作的技术。它通过多线程、线程池等机制实现资源的有效利用,提高程序运行效率。Java并发编程的...

    笔记_张孝祥_Java多线程与并发库高级应用

    张孝祥Java多线程与并发库高级应用学习笔记,很经典的学习多线程和并发的资料。张孝祥Java多线程讲义笔记由张孝祥亲自整理,很实用的。

    java并发编程实践笔记

    ### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 ...以上是Java并发编程实践笔记中总结的关键知识点,涵盖了从基本概念到高级技术的应用,旨在帮助开发者构建高效、可靠的多线程应用。

    java学习笔记markdown

    6. **多线程**:阐述Java中的并发编程,包括线程的创建、同步机制(synchronized、wait/notify、Lock接口)、线程池以及并发集合。 7. **设计模式**:介绍常见的设计模式,如单例、工厂、装饰器、观察者等,帮助...

    Java多线程学习笔记

    ### Java多线程学习笔记 #### 一、线程的基本概念 在计算机科学中,**线程**(Thread)是程序执行流的最小单位。一个标准的程序只能做一件事情,而通过多线程技术,可以让程序同时处理多个任务。在Java中,线程是...

    Java并发编程与高并发解决方案-学习笔记-www.itmuch.com.pdf

    本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...

    学习笔记:多线程Java Socket编程示例

    总结来说,这个学习笔记提供了一个使用Java Socket编程实现多线程服务器的示例,它演示了如何利用ExecutorService创建线程池来处理并发连接,是理解Java并发编程和网络通信的一个实用案例。虽然这是一个学习笔记,但...

    Java学习笔记——良葛格

    线程和并发处理也是Java的一大亮点,JDK5.0对多线程的支持进一步加强,提供了更高级的并发工具类。 文件I/O操作在任何编程中都必不可少,Java的IO流系统提供了一套完整的输入输出处理机制,包括字节流和字符流,...

Global site tag (gtag.js) - Google Analytics