`
java2000.net
  • 浏览: 633206 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论
阅读更多

多线程杂谈<o:p></o:p>

作者:陈跃峰

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

<o:p> </o:p>

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

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

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

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

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

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

<o:p> </o:p>

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

 
分享到:
评论

相关推荐

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

    并行计算是当今热门的一个技术,本文档简单介绍了多核多线程的入门知识,可以作为初学者入门的好材料。

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

    主要介绍了Linux多核多线程编程相关知识,以及如何借助工具进行优化,利用多线程提高程序性能。源码实例丰富,是多核多线程中初学者必备文档。

    多线程编程指南 SUN出品

    多线程编程指南 SUN公司 多线程编程值得研究的好书

    关于Java的几个经典问题

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

    高并发场景杂谈.zip

    为常见的高并发场景提供一些思路,从简单的分库分表到硬件级负载均衡都会涉及到,在不同的场景上选择不同的应对措施

    JAVA面试题解惑系列114页.pdf

    (一)类的初始化顺序 (二)到底创建了几个String 对象? (三)变量(属性)的覆盖 (四)final、finally 和finalize 的区别 (五)传了值还是传了引用?...(十)话说多线程 (十一)这些运算符你是否还记得?

    Java面试题解惑系列

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

    JAVA面试题解惑系列合集

    作者:臧圩人 JAVA面试题解惑系列博客文章精选 1. JAVA面试题解惑系列 1.1 JAVA面试题解惑系列(一)...1.10 JAVA面试题解惑系列(十)——话说多线程 1.11 JAVA面试题解惑系列(十一)——这些运算符你是否还记得?

    JAVA面试题解惑系列

    类的初始化顺序 到底创建了几个String对象? 变量(属性)的覆盖 final、finally和finalize的区别 传了值还是传了引用? 字符串(String)杂谈 日期和时间的处理 ...话说多线程 这些运算符你是否还记得?

    Windows黑客编程基础

    上面的题目带有“黑客”两个字,请大家别误会了,其实没有多少是讲黑客的,这完全是一篇菜鸟级的编程杂谈,如果您已是高手,就不必在此浪费时间了 。前几天在网上看了“病毒”兄写的《WIN下编程须知》一文,觉得在...

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

    windows用户称拦截api

    标签: computer 杂谈 声明:本页所发布的技术文章及其附件,供自由技术传播,拒绝商业使用。本页文章及其附件的所有权归属本文作者,任何使用文档中所介绍技术者对其后果自行负责,本文作者不对其承担任何责任。...

Global site tag (gtag.js) - Google Analytics