永发信息网

多线程编程怎么回事啊??

答案:2  悬赏:30  手机版
解决时间 2021-02-27 08:29
多线程编程怎么回事啊??
最佳答案
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

  什么是多线程?

  多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。

  使用线程的好处有以下几点:

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

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

  ·程序的运行速度可能加快

  ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

  还有其他很多使用多线程的好处,这里就不一一说明了。

  一些线程模型的背景

  我们可以重点讨论一下在Win32环境中常用的一些模型。

  ·单线程模型

  在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。

  ·块线程模型(单线程多块模型STA)

  这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。

  ·多线程块模型(自由线程块模型)

  多线程块模型(MTA)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和STA的执行速度都要块,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。
全部回答
package c14;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Counter1 extends Applet {
private int count = 0;
private Button
onOff = new Button("Toggle"),
start = new Button("Start");
private TextField t = new TextField(10);
private boolean runFlag = true;
public void init() {
add(t);
start.addActionListener(new StartL());
add(start);
onOff.addActionListener(new OnOffL());
add(onOff);
}
public void go() {
while (true) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e){}
if(runFlag)
t.setText(Integer.toString(count++));
}
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
go();
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
runFlag = !runFlag;
}
}
public static void main(String[] args) {
Counter1 applet = new Counter1();
Frame aFrame = new Frame("Counter1");
aFrame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300,200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
} ///:~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请教各位网友人和人之间的根本关系是什么?是
森海塞尔CX3.00应给怎样煲机
大秦锅炭火铜锅涮肉坊地址在哪,我要去那里办
【我最想依靠的人是你】我最想依靠的人是你作
重庆驾驶员开出租车需要缴纳多少保证金?新车
白细胞多会怎么样
喉咙里有痰,吃柠檬可以不
罗斯福新政的中心措施是BA. 整顿财政金融系统
女性尿道口出血
外面卖的豆腐越来越不好吃了,想自己做豆腐吃
欧典美容养生SPA会所在什么地方啊,我要过去
百信杂货超市地址在哪,我要去那里办事
道县永州中宇卫浴地址在什么地方,想今天过去
有没有英文伤感男声慢节奏的歌曲
自由之战的小龙和大龙打了分别有什么用?
推荐资讯
缘美首饰加工地址有知道的么?有点事想过去
现在在哪能买到A卡啊?
迅雷高速通道下载 BT 文件,不仅显示暂无数据
振华家电制冷维修中心在哪里啊,我有事要去这
拟人的成语大全
求明星耽美生子文。和穿越之我是弃妃
《灵祭》txt全集下载
在钢筋混凝土肋梁楼盖施工中,若沿主梁方向浇
股票分时图上的黄白线代表什么
世界上最高的铁路──青藏铁路于2006年7月1日
资源树纳米复合材料价格高不高?
如何利用Dreamweaver上传网页
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?