`

并发学习笔记(更新中,java编程思想第四版21章)

 
阅读更多

实现并发最直接的方式是在操作系统级别使用进程。

 

并发任务彼此隔离的编程语言,被称为函数型语言,例如:erlang。

 

Java的线程机制是抢占式的,这表示调度机制会周期性地中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。(协作多线程)

 

线程的底层机制:切分CUP时间,但通常你不需要考虑它。

使用线程机制是一种建立透明的,可扩展的程序的方法。

 

Thread.yield()的调用是对线程调度器的一种建议,它表明“我已经执行完全生命周期中最重要的部分,此刻正是切换给其他任务执行一段时间的大好时机。

main()创建Thread对象时,每个Thread都”注册“了自己,它的任务退出其run()并死亡之前,垃圾回收器无法清除它。一个线程会创建一个单独的执行线程,在对start()的调用完成之后,它仍会继续存在。

 

使用Executor(java.util.concurrent包),用于管理Thread对象,为客户端和任务执行之间提供一个间接层,由Executor这个中介对象负责执行任务。允许你管理异步任务的执行。

ExecutorService(具有服务生命周期的Executor)知道如何构建恰当的上下文来执行Runnable对象。

		ExecutorService service = Executors.newCachedThreadPool();//or newFixedThreadPool(5_
		for(int i = 0; i < 5; i++){
			service.execute(new LiftOff());
		}
		service.shutdown();

 创建Executor的线程(这里是main线程)会继续运行,直至Executor的shutdown()方法调用后,这个线程(main)将在Executor中所有任务完成之后尽快退出。

 

在任何线程池中,现有线程在可能的情况下,都会被自动复用。

SingleThreadExecutor:对于想在另一个线程中连续运行的任何事物来说,是很有用的。例如监听进入的套接字连接的任务,或希望在线程中运行的短任务(如更新本地或远程日志的小任务)。

 

从任务中产生返回值:Callable接口。它的类型参数表示是从方法call()中返回值,并且必须使用ExecutorService.submit()方法调用它,示例:

public class CallableDemo {
	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		List<Future<String>> list = new ArrayList<Future<String>>();
		
		for(int i =0; i < 5; i++){
			list.add(service.submit(new TaskWithResult(i)));
		}
		
		for(Future<String> future : list){
			try{
				//get() blocks until completion:
			System.out.println(future.get());
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				service.shutdown();
			}
		}
	}
	
}

class TaskWithResult implements Callable<String> {
	private int id;

	public TaskWithResult(int id) {
		this.id = id;
	}

	@Override
	public String call() throws Exception {
		return "result  of TaskWithResult " + id;
	}
}

异常是不能跨线程传播回main(),必须在本地处理所有任务内部产生的异常。

 

优先级将该线程的重要性传递给了调度器。优先级较低的线程仅仅是执行的频率较低。试图通过设置优先级来调试线程运行顺序是不可靠的。

 

让步:yield(),让别的线程使用CPU。这只是一个暗示,没有任何机制保证它将会被采纳。

 

后台线程:指在程序运行的时候在后台提供一种通用服务的线程,并不属于程序中必要的部分。因此当非后台进程结束时,程序也会终止,同时会杀死进程中的所有后台线程。反过来,只要有非后台线程还在运行,程序就不会终止(如main是非后台线程)。

可以通过实现ThreadFactory来定制Executor创建的线程属性(后台,优先级,名称):

 

 

 

 

分享到:
评论

相关推荐

    java编程思想第四版源代码.7z

    《Java编程思想》是 Bruce Eckel 的经典著作,第四版更是深入浅出地介绍了Java语言的核心概念和技术。这个压缩包包含的源代码是书中的示例程序,它们旨在帮助读者理解书中阐述的各种编程原理和实践。通过分析这些源...

    java 编程思想第四版习题答案

    《Java编程思想第四版》是Java编程领域里一本经典的教程,由 Bruce Eckel 所著。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、异常处理、集合框架、多线程、网络编程等多个方面。对于学习...

    Java并发编程学习笔记.rar

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

    Java并发编程学习笔记

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

    《Java编程思想》第四版答案

    《Java编程思想》是Bruce Eckel的经典之作,第四版更是被广大Java开发者视为学习和进阶的必备书籍。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、异常处理、多线程、集合框架、网络编程等多...

    java并发编程实践pdf笔记

    这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...

    Think in JAVA 编程思想 第四版 清晰扫描版

    综上,这本《Think in JAVA 编程思想》第四版涵盖了Java语言的各个方面,无论你是初学者还是经验丰富的开发者,都能从中受益。通过学习和实践书中的知识点,将有助于提升你的编程能力和问题解决能力。

    Java编程思想第四版中文版完整版

    《Java编程思想第四版》是一本深受欢迎的Java学习书籍,尤其适合已经具备一定编程基础的程序员进行进阶学习。作者Bruce Eckel以其独特的视角和深入浅出的讲解方式,全面而系统地介绍了Java编程语言的核心概念和技术...

    java并发编程学习笔记

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

    java编程思想第四版课后练习答案

    根据提供的文件信息,我们可以推断出这是一份关于《Java编程思想》第四版一书的课后练习答案指南。此书由Bruce Eckel撰写,并由MindView, Inc.出版。以下是从该文件的标题、描述及部分内容中提取的关键知识点。 ###...

    java网络编程第四版pdf

    总的来说,《Java网络编程(第四版)》是一本全面而实用的教程,适合有一定Java基础的开发者学习。它不仅涵盖了网络编程的基础知识,也深入到高级特性和实践技巧,对于想要提升网络编程能力的Java程序员来说,是一本...

    Java 并发编程实战.pdf

    此外,该书可能会对Java中一些新的并发API进行探讨,如java.util.concurrent包下的工具类和接口,例如Executor框架、Future、CompletableFuture、ConcurrentHashMap、Semaphore等。这些工具类和接口在构建大规模并发...

    java并发编程2

    在Java中,这通常通过创建和管理线程来实现。 2. **Java并发工具** - **`java.util.concurrent` 包** 提供了丰富的并发工具类,如`ExecutorService`用于管理线程池,`Semaphore`用于许可证管理,`CountDownLatch`...

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

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

    《java 并发编程实战高清PDF版》

    书中详细讨论了Java中的线程管理,包括如何创建和启动线程,以及如何控制线程的生命周期。读者将学习到`Thread`类和`Runnable`接口的基本用法,以及如何通过实现`Callable`接口创建带返回值的线程。 锁是Java并发...

    java并发编程实战中文加英文版加源码

    JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...

    java并发编程实战(英文版)

    综上所述,《Java并发编程实战》不仅涵盖了Java并发编程的基础知识和技术细节,还包含了丰富的实践经验和前瞻性的思考,是任何一位从事Java开发工作的程序员不可或缺的学习资源。无论是初学者还是有经验的开发者都能...

Global site tag (gtag.js) - Google Analytics