本文主要对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,不让外部知道实现细节。(做不同菜)

问题2:

Thread和Runnable是什么关系?

public

Thread class实现了Runnable interface,而且Thread中具有Runnable field。Thread class使用了strategy pattern。

Strategy pattern: 针对一组算法,将每个算法封装到具有共同接口的独立类中,实现算法能够自由替换。我们实现Runnable来得到具体的算法,用Runnable初始化Thread类。这样,实现线程Thread与具体执行的业务逻辑分离的目的。(+-*/不同计算)

共享数据被多个线程共同使用,需要添加锁进行保护。

java多线程编程_Java多线程编程相关推荐

  1. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  2. java 高效的多线程同步_java多线程的同步和异步

    java多线程的同步和异步 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算 ...

  3. java线程 教程_Java多线程系列教程

    Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...

  4. java并发排它锁_Java并发编程进阶——锁(解析)

    一.锁是什么 java开发中进行并发编程时针对操作同一块区域时,如果不加锁会出现并发问题,数据不是自己预计得到的值.我觉得有点像mysql事务中脏读.不可重复读.幻读的问题.加锁的目的是为了保证同一时 ...

  5. java 函数式编程_Java函数式编程:Javaslang入门

    java 函数式编程 Java是一门古老的语言,并且该领域中有很多新手在他们自己的领域(JVM)上挑战Java. 但是Java 8到来并带来了一些有趣的功能. 这些有趣的功能使编写新的惊人框架(例如S ...

  6. java 多线程 总结_Java 多线程总结

    昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...

  7. java线程入门_java多线程快速入门(一)

    1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...

  8. java的多线程机制_Java多线程开发(一)| 基本的线程机制

    0. 前言 Java 为了实现跨平台,在语言层面上实现了多线程.我们只需要熟悉 Java 这一套多线程机制就行了,比 C/C++ 要容易多了. 1. 定义任务 我们编写程序,最终是为了完成特定的任务. ...

  9. java多线程编程_Java多线程编程实战指南+设计模式篇.pdf

    Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...

最新文章

  1. 归并排序(代码注释超详细)
  2. ace.js ajax 跳转,ace.js中文使用手册,收集比较全面
  3. git add 之后因为没提交正确文件需要撤销
  4. 学习笔记Hadoop(十四)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例
  5. 深蓝学院《从零开始手写VIO》作业五
  6. http请求之get和post的区别
  7. Java8 拼接字符串 StringJoiner
  8. Linux多线程——使用信号量同步线程
  9. Android RIL源码研究笔记 の ril (一)
  10. [设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑
  11. Java学习指导————如何做到基础扎实
  12. jQuery1.9.1源码分析--Events模块
  13. Ubuntu 添加、删除ppa源
  14. 岭南师范C语言程序设计真题_2021南京师范大学现代教育技术考研经验分享
  15. 汇编语言 王爽 第四版 第一章 检测点1.1
  16. html图片自动出现效果,掀开图片显示介绍的css效果
  17. springboot word excel ppt 图片aspose 转换PDF 在线预览
  18. http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1184Elaine's Queue
  19. mac brew安装/卸载
  20. SCSI硬盘接口是什么

热门文章

  1. CANN 5.0硬核技术抢先看
  2. 云图说|AI开发难!难!难!端云协同多模态AI开发套件你需要了解一下
  3. 小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
  4. Presto性能调优的五大技巧
  5. 华为数据库2019年度大盘点
  6. 不给糖果就捣乱,用Python绘制有趣的万圣节南瓜怪【华为云分享】
  7. 野生前端的数据结构基础练习(2)——队列
  8. python分片的步长_Python的分片操作
  9. mysql 错误编码_【分享】MySQl操作系统提示错误编码
  10. SpringBoot与任务