`
阅读更多

多线程杂谈

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

多线程编程是一种很常用,但是也有一定的学习难度,本文不涉及多线程的程序如何编写,只通过一些实际的小例子,让大家熟悉一些基本的多线程的概念。

俗话说得好:“一心不可二用”,指的就是程序编程中的单线程编程,这个属于基本的编程范畴。但是在实际的工作和生活中,还是需要一些协调工作。例如电视上有人展示的左右手同时写字,这个用程序的理解就是在多线程工作,因为人的大脑只有一个,在任何一个小的时间点,只能控制一个手写字,那么就只好控制左手写一点,再控制右手写一点,不断的切换控制,使人觉得在同时写一样,这样实现同时工作。现实里,大家也知道能够两手同时写字的人不多,一个原因是缺乏锻炼,另外一个是该工作的确有难度,多线程编程也是如此。

多线程其实最核心的就是同时工作,那么再同时工作时就会出现一些问题,典型的就是互斥、同步和死锁。

互斥指一个内容,线程术语叫临界资源,在任何时候只能被一个线程使用。例如在大家的大学时代,寝室里有台电脑是两个人一起买的,当一个人在使用时,另外一个人就使用不了,如果把这两个人看成线程的话,那么这个电脑就是临界资源,对于这两人来说,电脑就是互斥的。

有了互斥的问题,就要解决这个问题,所以这两个人可能就要定个规矩,把两个人使用电脑的时间分开,这个就是同步。还有大家排队买票的时候,就在自觉的进行同步。所以同步是解决互斥的一种比较好的办法。同步实现的原理就是在一个线程工作时在临界资源上加一个锁,当前只能自己使用,例如排队买票时一个人在买时,其他的人(线程)就自觉等待。另外一个典型的互斥锁的例子是公共卫生间的使用。

最后说一下死锁的问题,这是线程编程中比较烦心的一个问题。还以前面的两个人使用电脑为例子,假设两个人规定135三天A用电脑,246三天B用电脑,周日谁用都可以,而且AB都是很礼貌的同学,那么就会出现这样的问题,AB同时想用电脑,A就礼貌的对B说:你先用吧,B也会礼貌的对A说:你先用吧。这样AB让来让去,谁都用不了,则AB两个人(线程)就这样无限制的等待下去,这种现象在线程中称作死锁,是线程编程中必须杜绝的现象。

以上是本人的一些理解,不足之处请大家多多补充和指正。

分享到:
评论

相关推荐

    多核多线程杂谈-并行计算

    ### 多核多线程杂谈-并行计算 #### 1. 并行计算概述 随着计算机硬件的发展,单核处理器的性能提升遇到了物理瓶颈,因此多核处理器成为了提高计算能力的关键技术之一。并行计算是利用多核处理器或多台计算机协同...

    炉边夜话---多核多线程杂谈

    - **多线程**:是一种软件技术,允许多个线程(即程序执行路径)在同一个进程空间内并发执行。多线程能够充分利用多核处理器的能力,通过在不同核心上分配任务来提升程序的执行效率。 #### 2. 并发编程时代的重要性...

    多线程编程指南 SUN出品

    《多线程编程指南》是由SUN公司出版的一本深入探讨多线程编程的重要书籍,对于想要提升在并发处理方面技能的程序员来说,这是一份不可多得的学习资源。本书全面讲解了Java语言中的线程相关知识,涵盖了从基本概念到...

    杂谈,一些工具类的集合

    5. **线程和并发工具类**:在多线程或多进程环境中,这些工具可以帮助开发者管理并发任务,比如同步机制(锁、信号量)、线程池和定时任务调度。 6. **加密解密工具类**:用于保护敏感信息的安全,如MD5、SHA哈希...

    高并发场景杂谈.zip

    "高并发场景杂谈.zip"这个压缩包文件集成了多种处理高并发问题的策略和技术,旨在为开发者提供解决高并发问题的思路和实践案例。下面将详细讨论其中涉及的知识点。 首先,我们来看"Redis专场:如何利用Redisson...

    关于Java的几个经典问题

    (五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 (八)——聊聊基本类型(内置类型)(九)——继承、多态、重载和重写(十)——话说多线程 (十一)——这些运算符你是否...

    Android开发杂谈

    5. **异步编程与多线程**: Android主线程负责UI更新,因此任何耗时操作都应该在后台线程执行,以防阻塞UI。理解AsyncTask、Handler、Looper、Thread、Runnable以及现代的Coroutines或RxJava,有助于编写高效的并发...

    java陷阱--面试(题集)杂谈

    键字)用于声明变量、方法或类,表示不可变或最终...以上是Java面试中常见的问题及答案,涵盖了Java的基础语法、面向对象、集合、多线程、异常处理等多个方面。掌握这些知识点对于成为一名合格的Java开发者至关重要。

    swing开发杂谈--初版本程序源码

    在"swing开发杂谈--初版本程序源码"中,可能包含了上述部分或全部知识点的实际应用,通过分析`netHelper`这个子文件夹,我们可以看到可能的网络辅助类或其他功能模块的实现。这个源码可能会演示如何使用Swing构建一...

    Java面试题解惑系列

    来自网络,主要包括以下内容:1、类初始化的顺序;2、到底创建了几个String对象;3、变量(属性)的覆盖;4、final,finally,finalize;...10.多线程;11.运算符总结。 适合将要笔试面试Java的朋友参考。

    java杂谈-一个计算机专业学生几年的编程经验汇总谈.pdf

    `client`版本通常适用于内存有限的桌面环境,而`server`版本则针对服务器环境,优化了多线程和大内存应用的性能。 理解这些基础知识对于Java程序员来说至关重要,它们不仅能够帮助我们编写更高效的代码,还能让我们...

    充分利用CPU多核心并发特性,创建多个pigz线程, 并将pigz的每个线程绑定的固定核心, 实现高性能 压缩和压缩

    linux

    JAVA面试题解惑系列合集

    它包括了从类的初始化顺序、String对象的创建数量、变量的覆盖、final关键字、传值和传引用的区别、字符串的处理、日期和时间的处理、基本类型的细节、继承和多态、多线程以及运算符相关的面试题目。下面将详细解析...

    JAVA面试题解惑系列

    多线程编程是Java的一个强项,面试中可能会讨论线程的创建、同步机制(如synchronized、Lock)、线程安全问题以及并发设计模式。 11. **运算符**: 了解各种运算符的优先级、作用以及特殊用法,如位运算符在处理...

    臧圩人--JAVA面试题解惑系列合集.pdf

    - **知识点**:多线程编程基础,包括线程生命周期、线程同步、锁机制、线程安全问题及其解决方案,如`synchronized`关键字和`Lock`接口的使用。 **1.11 JAVA面试题解惑系列(十一)——这些运算符你是否还记得?** ...

Global site tag (gtag.js) - Google Analytics