多线程杂谈
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
多线程编程是一种很常用,但是也有一定的学习难度,本文不涉及多线程的程序如何编写,只通过一些实际的小例子,让大家熟悉一些基本的多线程的概念。
俗话说得好:“一心不可二用”,指的就是程序编程中的单线程编程,这个属于基本的编程范畴。但是在实际的工作和生活中,还是需要一些协调工作。例如电视上有人展示的左右手同时写字,这个用程序的理解就是在多线程工作,因为人的大脑只有一个,在任何一个小的时间点,只能控制一个手写字,那么就只好控制左手写一点,再控制右手写一点,不断的切换控制,使人觉得在同时写一样,这样实现同时工作。现实里,大家也知道能够两手同时写字的人不多,一个原因是缺乏锻炼,另外一个是该工作的确有难度,多线程编程也是如此。
多线程其实最核心的就是同时工作,那么再同时工作时就会出现一些问题,典型的就是互斥、同步和死锁。
互斥指一个内容,线程术语叫临界资源,在任何时候只能被一个线程使用。例如在大家的大学时代,寝室里有台电脑是两个人一起买的,当一个人在使用时,另外一个人就使用不了,如果把这两个人看成线程的话,那么这个电脑就是临界资源,对于这两人来说,电脑就是互斥的。
有了互斥的问题,就要解决这个问题,所以这两个人可能就要定个规矩,把两个人使用电脑的时间分开,这个就是同步。还有大家排队买票的时候,就在自觉的进行同步。所以同步是解决互斥的一种比较好的办法。同步实现的原理就是在一个线程工作时在临界资源上加一个锁,当前只能自己使用,例如排队买票时一个人在买时,其他的人(线程)就自觉等待。另外一个典型的互斥锁的例子是公共卫生间的使用。
最后说一下死锁的问题,这是线程编程中比较烦心的一个问题。还以前面的两个人使用电脑为例子,假设两个人规定1、3、5三天A用电脑,2、4、6三天B用电脑,周日谁用都可以,而且A和B都是很礼貌的同学,那么就会出现这样的问题,A和B同时想用电脑,A就礼貌的对B说:你先用吧,B也会礼貌的对A说:你先用吧。这样A和B让来让去,谁都用不了,则A和B两个人(线程)就这样无限制的等待下去,这种现象在线程中称作死锁,是线程编程中必须杜绝的现象。
以上是本人的一些理解,不足之处请大家多多补充和指正。
分享到:
相关推荐
### 多核多线程杂谈-并行计算 #### 1. 并行计算概述 随着计算机硬件的发展,单核处理器的性能提升遇到了物理瓶颈,因此多核处理器成为了提高计算能力的关键技术之一。并行计算是利用多核处理器或多台计算机协同...
- **多线程**:是一种软件技术,允许多个线程(即程序执行路径)在同一个进程空间内并发执行。多线程能够充分利用多核处理器的能力,通过在不同核心上分配任务来提升程序的执行效率。 #### 2. 并发编程时代的重要性...
《多线程编程指南》是由SUN公司出版的一本深入探讨多线程编程的重要书籍,对于想要提升在并发处理方面技能的程序员来说,这是一份不可多得的学习资源。本书全面讲解了Java语言中的线程相关知识,涵盖了从基本概念到...
5. **线程和并发工具类**:在多线程或多进程环境中,这些工具可以帮助开发者管理并发任务,比如同步机制(锁、信号量)、线程池和定时任务调度。 6. **加密解密工具类**:用于保护敏感信息的安全,如MD5、SHA哈希...
"高并发场景杂谈.zip"这个压缩包文件集成了多种处理高并发问题的策略和技术,旨在为开发者提供解决高并发问题的思路和实践案例。下面将详细讨论其中涉及的知识点。 首先,我们来看"Redis专场:如何利用Redisson...
(五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 (八)——聊聊基本类型(内置类型)(九)——继承、多态、重载和重写(十)——话说多线程 (十一)——这些运算符你是否...
5. **异步编程与多线程**: Android主线程负责UI更新,因此任何耗时操作都应该在后台线程执行,以防阻塞UI。理解AsyncTask、Handler、Looper、Thread、Runnable以及现代的Coroutines或RxJava,有助于编写高效的并发...
键字)用于声明变量、方法或类,表示不可变或最终...以上是Java面试中常见的问题及答案,涵盖了Java的基础语法、面向对象、集合、多线程、异常处理等多个方面。掌握这些知识点对于成为一名合格的Java开发者至关重要。
在"swing开发杂谈--初版本程序源码"中,可能包含了上述部分或全部知识点的实际应用,通过分析`netHelper`这个子文件夹,我们可以看到可能的网络辅助类或其他功能模块的实现。这个源码可能会演示如何使用Swing构建一...
来自网络,主要包括以下内容:1、类初始化的顺序;2、到底创建了几个String对象;3、变量(属性)的覆盖;4、final,finally,finalize;...10.多线程;11.运算符总结。 适合将要笔试面试Java的朋友参考。
`client`版本通常适用于内存有限的桌面环境,而`server`版本则针对服务器环境,优化了多线程和大内存应用的性能。 理解这些基础知识对于Java程序员来说至关重要,它们不仅能够帮助我们编写更高效的代码,还能让我们...
linux
它包括了从类的初始化顺序、String对象的创建数量、变量的覆盖、final关键字、传值和传引用的区别、字符串的处理、日期和时间的处理、基本类型的细节、继承和多态、多线程以及运算符相关的面试题目。下面将详细解析...
多线程编程是Java的一个强项,面试中可能会讨论线程的创建、同步机制(如synchronized、Lock)、线程安全问题以及并发设计模式。 11. **运算符**: 了解各种运算符的优先级、作用以及特殊用法,如位运算符在处理...
- **知识点**:多线程编程基础,包括线程生命周期、线程同步、锁机制、线程安全问题及其解决方案,如`synchronized`关键字和`Lock`接口的使用。 **1.11 JAVA面试题解惑系列(十一)——这些运算符你是否还记得?** ...