怎么用多线程

1. 如何使用线程

java平台从开始就被设计成为多线程环境。在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的。本质上,你可以认为这些作业是线程。它们正好是系统治理线程,但是无论如何,它们是线程。线程使你能够定义相互独立的作业,彼此之间互不干扰。系统将交换这些作业进或出CPU,这样(从外部看来)它们好象是同时运行的。 在你需要在你的程序中处理多个作业时,你也可以使用多个进程。这些进程可以是你自己创建的,你也可以操纵系统线程。 你进行这些多作业处理,要使用几个不同的类或接口: java.util.Timer类

javax.swing.Timer类Thread类Runnable接口 对于简单的作业,通常需要重复的,你可以使用java.util.Timer类告诉它“每半秒钟做一次”。注重:大多数系统例程是使用毫秒的。半秒钟是500毫秒。 你希望Timer实现的任务是在java.util.TimerTask实例中定义的,其中运行的方法包含要执行的任务。这些在Hi类中进行了演示,其中字符串“Hi”重复地被显示在屏幕上,直到你按Enter键。 import java.util.*;

public class Hi {

public static void main(String args[])

throws java.io.IOException {

TimerTask task = new TimerTask() {

public void run() {

System.out.PRintln("Hi");}};Timer timer = new Timer();

timer.schedule(task, 0, 500);

System.out.println("Press ENTER to stop");

System.in.read(new byte[10]);

timer.cancel();}} Java Runtime Environment工作的方式是只要有一个线程在运行,程序就不退出。这样,当取消被调用,没有其它线程在运行了,则程序退出。有一些系统线程在运行,如碎片收集程序。这些系统线程也被称为后台线程。后台线程的存在不影响运行环境被关闭,只有非后台线程保证运行环境不被关闭。 Javax.swing.Timer类与java.util.timer类的工作方式相似,但是有一些差别需要注重。第一,运行的作业被ActionListener接口的实现来定义。第二,作业的执行是在事件处理线程内部进行的,而不象java.util.Timer类是在它的外部。这是很重要的,因为它关系到Swing组件集是如何设计的。 假如你不熟悉Swing,它是一组可以被Java程序使用的图形组件。Swing被设计程被称为单线程的。这意味着对Swing类内部内容的访问必须在单个线程中完成。这个特定的线程是事件处理线程。这样,例如你想改变Label组件的文字,你不能仅仅调用Jlabel的setText方法。相反,你必须确认setText调用发生在事件处理线程中,而这正是javax.swing.Time类派的上用场的地方。 为了说明这第二种情况,下面的程序显示一个增加的计数器的值。美半秒钟计数器的数值增加,并且新的数值被显示。

2. 怎么理解多线程,为什么要用多线程

为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程zhidao的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等

多线程的好处:

1.使用线程可以把占据时间长的程序中的任务放到后台去处理

2.用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度

3.程序的运行效率可能会提高

4.在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.

多线程的缺点:

1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.

2.更多的线程需要更多的内存空间

3.线程中止需要考虑对程序运行的影响.

4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生

3. 如何学会多线程工作

转载这是一个很有意思的问题,我准备先介绍一下心理学上对这个问题的看法,然后从自己的思考和经验出发谈一谈应对之道。

的确,从认知心理学的观点来看,严格来讲人的「多线程工作」是不可能的。因为在任一个瞬间,人只能有一个「注意焦点」,这个注意焦点牵引了人的认知加工资源。

但有时你会误以为同时关注了两个东西,其实是发生了注意转移的结果,即焦点从一个对象转移到另一个对象上,实际上还是一个串行而非并行的过程。当然有一种例外是,有些很熟练的技能,可以「自动化」地、不加注意地进行,那么就可以和其他事情同时做。

比如你骑自行车,你的女朋友坐在后面笑,这时你的注意焦点保持在你女友身上,你和她聊天的同时,你的腿也在一刻不停地蹬,你不需要停下来是因为骑车不需要你的注意和认知资源。但如果此时突然前面蹿出一只喵星人,你可能立马就会把注意焦点给转移了。

当然题主烦恼的并非是这种「秒级」、「毫秒级」的「多线程」,而是指在一个「时期」内,会同时担负几种不同的工作,完成不同的任务,这就是另一种意义上的,不同任务之间需要切换的「多线程」。「任务切换(task switching)」也可以算认知心理学中的一个经典课题了。

心理学家早就发现,当你从任务A切换到任务B后,执行任务B的绩效要明显比非任务切换条件下执行B的绩效差,这个差异称为「切换代价(switching cost)」。切换代价的形成原因主要有两种,一是任务A留下的认知惯性,也就是我之前已经习惯了任务A的认知情境、反应方式,这个惯性会对完成任务B造成干扰,二是做B的时候需要对B进行认知重构,重新回忆起B的相关背景和信息,这个重构也需要时间,而且可能不完整。

可现实就是这样,虽然不论从心理学还是从我们的生活经验来看,这种需要任务切换的「多线程」的感觉很糟,效率很低,但我们往往没有选择:一个任务做到一半被打断,然后去做另一个任务,然后又被打断,又去做另一个……这里有个至关重要的事实是:如果你是在非常投入和忘我的思考时被打断,那么你的「损失」和懊恼就会非常大,相反,如果你只是在做抄写一篇文档这种不动脑子的活,那么即便是频繁的中断也不会对你造成太大的影响。所以,如果你能选择好合适的中断点,中断就并不可怕,切换的损失也可以降到最低,如果说多任务工作有什么技巧的话,那么这个技巧就是「对中断点进行控制和管理的技巧」。

这个技巧的前提是,我们需要对要完成的任务进行有效地剖析,区分出「容忍中断」的部分和「无法容忍中断」的部分,然后用可保证的相对完整的时间去施行那些「无法容忍中断」的部分。为此我提出了一般任务分解的「三明治模型」: 这是一个金枪鱼三明治,它有一个核心,就是金枪鱼肉泥,完成这个部分的努力我称为「核心思考区间」。

事实上大多数任务都有一个至关重要、通常也是最棘手的部分,这个部分需要我们集中精力、非常专注地进行思考,然后将其破解,一旦这个部分被我们「吃下」,那么这个任务就已经完成了大半,余下的就是一些支持性的、补完性的工作(即「支持性思考区间)和一些「体力劳动」(即「操作性动作区间」)了。 我自己工作中有一个习惯,就是拿到一个任务后,势必要先去找那个任务的核心思考区间,找到那块硬骨头,去啃下来,而不是先去做那些周边的打扫性的工作。

举个简单的例子,如果你现在接到一个做PPT的任务,你第一步准备做什么?是先挑一个漂亮的主题模板吗?不是。是马上去百度谷歌查资料吗?也不是。

正确的答案是:设计PPT的架构。即你要分析你的受众,他们的知识水平、理解水平以及兴趣点、关注点,在此基础上设计你的内容以及展现内容的顺序,先讲什么,占比多少,再讲什么,占比什么,以及讲的时候采取什么风格、策略,然后,PPT的架构就出来了。

这个实施过程就是该任务的「核心思考区间」,你不需要任何辅助,你只需思考,非常专注的思考,你要的工具,仅仅是一张纸和一只笔(你需要把你的灵感快速地记下来)。等你完成了这个过程,你可以选择继续填充具体的内容(「支持性思考区间」),也可以break一下,也可以去做别的工作,都无所谓。

之后,等你在为这件PPT选择模板、寻找配图或者调整字体的时候(「操作性动作区间」),你并不大会介意被打断,因为你知道,这个任务在某种意义上,你已经完成了。 不瞒你说,为了写这个答案,我用了半个小时的时间、一张A4纸和一只笔,用我纯粹的、专注的思考,来设计它的「架构」。

设计完成后,我吃了一顿晚饭,看了一集美剧,这个写作的中断并没有让我担心,因为我知道,即便我还没有在电脑上敲入一个字,这个答案,其实已经写完了。 这就是多线程工作的秘诀。

很多时候,你只是需要一个专注不受干扰的、能纯粹跳脱出来思考的、能达至「心流」状态的、能把最关键的「硬核」搞定的——半小时。 这个方法背后暗含着这样一个逻辑:当我们不得不对一个任务进行分段处理时,我们并不应机械地按照时间段来切分(「今天上午9点至10点做A,明天下午1点至3点继续做A」),而是应该按照这。

4. C语言怎样实现多线程

首先你要有控制蛇移动方向的全局变量(定义在main以外因为线程函数也要调用它,每次键盘输入都会修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移动时应该是在while里面操作的吧,你每移动一步前都读一下direction这个变量的数值然后再控制移动方向(注意s这个键可以忽略因为不会倒着走) 然后你可以用pthread.h这个库 例子是 pthread t;// 定义一个线程 pthread_create(&t, null, listen_keyboard_input, null);//建立线程执行listen_keyboard_input这个函数 这个线程执行的函数 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ direction =getchar(); } } 但是这里存在同步问题, 比如当这个线程的getchar()在给direction辅助的同时,你控制贪吃蛇移动的线程正在调用 direction的值来判断下一个移动方向,这就会出问题,所以要加一个锁,叫 mutex lock;这个也定义成全局变量可以使各线程共享。

pthread_mutex_t mutex; //定义一个锁 pthread_mutex_init(&mutex, null, null);//初始化 然后把函数修改成 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一个控制贪吃蛇移动的时候也要加锁 while(。..){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ 。

. } 。

.. } 这样就好了 注意你的控制贪吃蛇移动的部分也必须要放在另外一个pthread 里面执行,如果放在主线程, 主线程会一直等listen_keyboard_input而什么事都不会做 你把这两个线程用 pthread_create 创建完成后 用 t1.join(); t2.join(); 就可以使这两个线程并发执行了 如果你用的是linux 来编译的,你再输入gcc 指令后加上 -lpthread 就可以了 还有什么不懂的你可以多找找 pthread 类的例子。

5. 简单实例说明多线程是怎么实现的

用mutex 或者event来做

你去MSDN上查一下

MFC一共有4种线程互斥的机制呢

在主线程中 建立互斥对象

在输出操作后释放该对象

在每个子线程中的输出之前 等待互斥对象

输出后释放互斥对象

具体的函数 很简单 MSDN都有

如CreateMutex()创建

Realese()释放

WaitForSingle。。。()记不太清除 等待的

自己查下吧 别人写的代码永远不是你的

你自己试着用的过程中会学到很多东西的

6. 怎么练多线程操作

第一个 心态 !这个是多线最重要的地方 你首先是心态要好 往往新手容易慌乱 如果慌乱 你随便怎么 都多线不起来 双线都是乱的 第二 不要去学耍帅吧 先把正常的操作练熟 比如下载微操练习图之类的 在你练习的同时 心态 熟练程度都在上升 只所以职业玩家多线得起来 很大一个原因就是他们在MF 怪物 或者对付敌人的时候 他们要非常的了解怪物的情况 敌人的情况 这些都是对这款游戏的熟练程度 上去了 才能实现的 所以在你了解得足够多的时候 再来考虑练双线 多线吧 第三 你具备了比较熟练的程度 也就是有个稳定的心态 不慌张 双线骚扰+MF 怪物的时候 能够冷静的估计双线的2个地方的情况 心理有数了 一切就随之而来了 比如你这边跟敌人纠缠 那边的兵正在MF 怪物 你要对怪物对你兵的攻击情况 以及你兵力能力的正确估计有数 对整个战局的发生的时间有数 就是职业选手说的 “节奏感” 你不总可能不了解这些 虽然手速到了 你每次拉兵都拉慢一点 双线MF 战局兵死一大半吧>_。

怎么用多线程

转载请注明出处育才学习网 » 怎么用多线程

知识

留学用英语怎么说

阅读(239)

本文主要为您介绍留学用英语怎么说,内容包括英语翻译急,bushixiazaide,“留学”这个词用英语怎么说,英国人一般说中文还是英文马上要去英国伦敦留学,不知道英国人日。学英语要先从音标开始学习.熟练掌握了音标之后才能更好地学习和背诵单词

知识

微社区怎么用

阅读(309)

本文主要为您介绍微社区怎么用,内容包括微社区如何使用,微信微社区是什么怎么使用微社区,微社区如何添加加入按微社区如何添加加入按钮。微社区是什么?微信微社区,是微信团队与Discuz团队共同开发的功能,它内嵌在微信公众号里。微信公众账号可

知识

累用英语怎么写

阅读(384)

本文主要为您介绍累用英语怎么写,内容包括晚安,亲爱的,我有点累了.求英文翻译,好累,用英文怎么写,累的英语怎么写。累的英语:tired 读音:英 [taɪəd]美 [taɪərd] adj. 疲倦的;疲劳的;累的;厌烦的 动词tire的过去式和过去分

知识

翅膀用英语怎么说

阅读(378)

本文主要为您介绍翅膀用英语怎么说,内容包括翅膀用英语怎么说,翅膀的英文如果有多种翻译的话是指恶魔的翅膀,“翅膀”这个词用英语怎么说。翅膀:“wing”短语:天使翅膀 Angel Wings ; Angell Wing ; Angeltee ; Angels wings

知识

生姜洗发水怎么用

阅读(257)

本文主要为您介绍生姜洗发水怎么用,内容包括生姜洗发有用吗,生姜洗发水有用吗,怎么用生姜洗头。看水变成深黄的时间就可以拿来洗了、,现在菜价又在此调低对你我都是好消息。很难达到再生发的效果!先教你怎么煮生姜水,放至1个小时左右,以免

知识

滴滴加油的卷怎么用

阅读(399)

本文主要为您介绍滴滴加油的卷怎么用,内容包括滴滴加油券怎么使用,滴滴加油券怎么使用,滴滴加油券,怎么用。在滴滴车主里,找到车生活,里面有滴滴加油,点击里面的特权加油站,在这些加油站里加完油,支付时加油券会自动用于抵消现金。 打开滴滴打

知识

用微信怎么扫描二维码

阅读(545)

本文主要为您介绍用微信怎么扫描二维码,内容包括微信怎么扫描自己手机上的二维码,如何用微信扫描二维码,微信怎么扫描自己手机上的二维码的方法。微信是今年非常火的手机软件,在很多地方我们都会看到微信的二维码,很多商家做扫一扫关注微信的

知识

骄傲用英语怎么说

阅读(423)

本文主要为您介绍骄傲用英语怎么说,内容包括“我们的自豪”英文翻译,对感到骄傲英文,傲娇用英语怎么说。Proud pussy读音:英 [praʊd ˈpʊsi] 美 [praʊd ˈpʊsi] 释义:傲娇。语法:傲娇指外冷内热、蛮横娇羞、

知识

节拍器软件怎么用

阅读(373)

本文主要为您介绍节拍器软件怎么用,内容包括节拍器的使用方法,节拍器怎么用,节拍器的用法附图。节拍器有很多种,机械的、电子的和软件的以及效果器上的鼓机等等。可以根据自己喜好选择一种。用节拍器练习的方法开始先设置好需要的速度,比如6

知识

开业用英语怎么

阅读(374)

本文主要为您介绍开业用英语怎么,内容包括开业用英语怎么讲,“开业”的英文怎么说,新店开业的英文怎么说要简短的。网络释义business marketingOpening Promotion翻译结果开业促销The opening promotion

知识

秘制回梦饮怎么用划算

阅读(2223)

本文主要为您介绍秘制回梦饮怎么用划算,内容包括梦幻西游秘制回梦饮怎么使用效果最好,梦幻西游秘制回梦饮怎么使用效果最好,梦幻秘制回梦饮要多少材料。梦幻西游中级回梦丹在刷领三倍经验抓鬼和副本的时候最划算,因为这两项得到的金钱和经验

知识

懒人沙发怎么用

阅读(266)

本文主要为您介绍懒人沙发怎么用,内容包括懒人沙发的使用心得,折叠布艺懒人沙发怎么安装,懒人沙发应该怎么做。懒人沙发颜色可以鲜艳时尚,也可以复古成熟稳重。装点你的小家,让你轻松打造出一份属于自己的温馨空间。它很轻便,把它放在阳台上,你

知识

卫生棉怎么用图解

阅读(269)

本文主要为您介绍卫生棉怎么用图解,内容包括卫生棉使用方法(图解),卫生巾怎么用图女孩使用卫生巾演示,卫生巾怎么用过程图解。(1)使用前,请先将双手洗净。然后沿o.b.玻璃纸包套中央的印花色带拆开,撕去下部的玻璃纸包装。 (2)将有棉线的一端解开,

知识

怎么用邮箱注册微博

阅读(408)

本文主要为您介绍怎么用邮箱注册微博,内容包括我是用新浪微博登录的,怎么注册新用户不成功育儿问答宝宝树,微博的邮箱该怎么注册,怎样注册微博邮箱。您好!您可以在注册微博的时候,帐号填写QQ邮箱,密码自己设定好2、注册完成后,会发一封验证邮件

[/e:loop]