java多线程编程_Java多线程编程
本文主要对Java多线程编程进行深入研究。本文通过查看源代码及参考资料等方式研究。参考文章: Java多线程编程深入详解。
由问题入手:
问题1:
2种创建Thread的方式都是实现run()方法,但为什么Thread执行却调用start()方法?
Thread.run()方法可以被current Thread直接调用,使得current Thread执行run()函数。而当current Thread调用Thread.start()方法,会导致2个线程并发执行:调用start()方法的current Thread会返回;JVM新创建Thread来调用run()方法。
*
注意:start()方法为synchronized方法,防止同一时间被多次调用。该方法的核心方法start0()方法为native方法。
native关键字表示该方法是原生方法,使用C/C+编写并以DLL导入由Java调用。实际上java就是在不同的平台上调用不同的native方法实现对不同操作系统的访问的。native方法由操作系统实现并由java通过JNI接口调用。
其实,这里使用了template pattern,即完成一件事需要特定的某些步骤(父类),但对于不同情况下,这些步骤的具体实现不同(子类)。父类中定义算法的骨架,而在子类中提供骨架中操作的具体实现。父类中定义算法的函数可定义为final method,防止子类重定义,同时,定义步骤的函数可定义为protected method,不让外部知道实现细节。(做不同菜)
![](/assets/blank.gif)
问题2:
Thread和Runnable是什么关系?
public
Thread class实现了Runnable interface,而且Thread中具有Runnable field。Thread class使用了strategy pattern。
![](/assets/blank.gif)
Strategy pattern: 针对一组算法,将每个算法封装到具有共同接口的独立类中,实现算法能够自由替换。我们实现Runnable来得到具体的算法,用Runnable初始化Thread类。这样,实现线程Thread与具体执行的业务逻辑分离的目的。(+-*/不同计算)
共享数据被多个线程共同使用,需要添加锁进行保护。
java多线程编程_Java多线程编程相关推荐
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- java 高效的多线程同步_java多线程的同步和异步
java多线程的同步和异步 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算 ...
- java线程 教程_Java多线程系列教程
Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...
- java并发排它锁_Java并发编程进阶——锁(解析)
一.锁是什么 java开发中进行并发编程时针对操作同一块区域时,如果不加锁会出现并发问题,数据不是自己预计得到的值.我觉得有点像mysql事务中脏读.不可重复读.幻读的问题.加锁的目的是为了保证同一时 ...
- java 函数式编程_Java函数式编程:Javaslang入门
java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...
- java 多线程 总结_Java 多线程总结
昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...
- java线程入门_java多线程快速入门(一)
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...
- java的多线程机制_Java多线程开发(一)| 基本的线程机制
0. 前言 Java 为了实现跨平台,在语言层面上实现了多线程.我们只需要熟悉 Java 这一套多线程机制就行了,比 C/C++ 要容易多了. 1. 定义任务 我们编写程序,最终是为了完成特定的任务. ...
- java多线程编程_Java多线程编程实战指南+设计模式篇.pdf
Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...
最新文章
- 归并排序(代码注释超详细)
- ace.js ajax 跳转,ace.js中文使用手册,收集比较全面
- git add 之后因为没提交正确文件需要撤销
- 学习笔记Hadoop(十四)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例
- 深蓝学院《从零开始手写VIO》作业五
- http请求之get和post的区别
- Java8 拼接字符串 StringJoiner
- Linux多线程——使用信号量同步线程
- Android RIL源码研究笔记 の ril (一)
- [设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑
- Java学习指导————如何做到基础扎实
- jQuery1.9.1源码分析--Events模块
- Ubuntu 添加、删除ppa源
- 岭南师范C语言程序设计真题_2021南京师范大学现代教育技术考研经验分享
- 汇编语言 王爽 第四版 第一章 检测点1.1
- html图片自动出现效果,掀开图片显示介绍的css效果
- springboot word excel ppt 图片aspose 转换PDF 在线预览
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1184Elaine's Queue
- mac brew安装/卸载
- SCSI硬盘接口是什么