- 浏览: 20490 次
-
文章分类
最新评论
比如在主类中有2个线程,
thread1 a = new thread1();//做动画1
thread2 b = new thread2();//做动画2
a.start();
b.start();
问题是:点击按钮怎样使线程暂停或杀掉,且杀掉线程时,画图清空?
热烈欢迎大家帮助和讨论!
谢...!
问题点数:50、回复次数:11
Top
1 楼LiaoM()回复于 2002-06-08 02:24:59 得分 0 wait(),sleep(),destory()
Top
2 楼Philson(触发状态)回复于 2002-06-08 10:06:20 得分 10在run()中设置一个循环条件,用另一个thread来控制这个条件。
Top
3 楼dd777(grass)回复于 2002-06-08 10:43:45 得分 0 **********
怎样暂停呢?
再唤醒呢 ?
**********
Top
4 楼bhr(追风)回复于 2002-06-08 11:44:15 得分 5http://java.sun.com/products/jdk/1.2/docs/guide/misc/threadPrimitiveDeprecation.html
Top
5 楼chfhxy(门外汉)回复于 2002-06-08 14:39:55 得分 0 尽量不要用destory(),因为线程可能占用资源而得不到释放
Top
6 楼liujuntao_1(流浪汉)回复于 2002-06-08 15:26:20 得分 5如果你让一个线程停止,只能让另一个唤醒它!
Top
7 楼dd777(grass)回复于 2002-06-08 23:08:52 得分 0 能具体些吗?
小举个例子。
比如在主类中有2个线程,
thread1 a = new thread1();//做动画1
thread2 b = new thread2();//做动画2
a.start();
b.start();
问题是:点击按钮怎样使线程暂停或杀掉,且杀掉线程时,画图清空?
Top
8 楼killjoy(伪装者)回复于 2002-06-09 01:12:48 得分 10public run() {
while(this.getName="线程A的名字") {
while (keepbusy) {
//如果Keepbusy=true,那么Thread A一直等待
}
}
对于你要暂停的话,你必须要先启动一个线程,让一个线程先进入临界区,然后让另一个线程wait,当第一个线程出临界区时发出notify(),这样等待进入临界区的线程就会自动被运行。
Top
9 楼dd777(grass)回复于 2002-06-09 19:20:58 得分 0 let me try!
come on all experts,how kinds you are!
Top
10 楼GJA106(中文字符)回复于 2002-06-10 14:02:57 得分 10public thread1 extends Thread
{
private boolean isRunning ;
thread1()
{
isRunning = true;
}
public void run()
{
while(isRunning)//外类中控制isRunning,决定线程的运行
{
//显示动画
}
//结束线程
}
}
Top
11 楼zqq_ttt()回复于 2002-06-10 15:40:30 得分 10Thread control;
public void action(Event e ,Graphics g)
//your button click event;
{ if(e.targert=="your button")
if(control.corrent==a)
a=null;//kill "a" thread;
g.SetbackColor(Color.white);
repaint();
}
g.SetbackColor(Color.white);这个方法可能不对,总之你要对画布进行一下操作,然后repaint一下。
a=null;是直接将线程置为空,相当于杀死线程。
如果不想杀死,或以后要用,可用a.suspend();不过如果这样的线程多了,系统资源会被大量占用,导致死机,这也是现在不提倡用得原因。在你用了这个方法以后,要人为的激发他。a.resume();
CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
搜索 收藏 打印 关闭 CSDN社区 > Java > J2SE / 基础类
线程问题,高手指点:怎样暂停,继续线程楼主whee(笨笨丸)2002-05-26 16:36:20 在 Java / J2SE / 基础类 提问
线程应该怎样暂停?在RUN()中用一个WHILE(TRUE)循环执行一段命令,把TRUE改成FALSE后线程停止了,线程也消亡了,那如何暂停后继续执行线程呢?
我想用WAIT(),和notify()控制,不过老是出错,不知道怎么用,有没有谁贴一段代码啊?
问题点数:20、回复次数:5
Top
1 楼freelybird(阿愚)回复于 2002-05-26 16:50:32 得分 51 wait() 与 notify() 是Object中的函数,可以用它去实现
2 至于暂停与继续是:suspend() resumethread(..)
Top
2 楼whee(笨笨丸)回复于 2002-05-26 16:56:31 得分 0 suspend 在JAVA2不是不能用了吗?
能帮我示范一下wait() notify()的用法吗?
Top
3 楼illia(蓝雪)回复于 2002-05-26 17:17:34 得分 5suspend()和resume()是挂起和恢复,java2中可以用
跟等待是不是相同概念
Thread thread=new Thread();
thread.wait();
thread.notify();
Top
4 楼forulong(龙行天下)回复于 2002-05-26 17:25:20 得分 10给个例子给你:自己换一些行;是关于银行存取款的。让
saver线程和spender线程同步。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Console
{
public static String title(Object o)
{
String t=o.getClass().toString();
if(t.indexOf("class") !=-1)
t=t.substring(6);
return t;
}
public static void setupClosing(JFrame frame){
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e{
System.exit(0);
}
});
}
public static void run(JApplet applet, int width, int height){
JFrame frame=new JFrame(title(applet));
setupClosing(frame);
frame.getContentPane().add(applet);
frame.setSize(width,height);
applet.init();
applet.start();
frame.setVisible(true);
}
}
public class Banking extends JApplet
{
private static double balance=1000;
private JButton start=new JButton("start");
private boolean started=false;
private static JTextField curBalance=new JTextField("1000",10);
private static double saveBal=100;
private static double spenBal=9;
private static boolean runFlag=false;
private BankAccount bk;
private static boolean canget=true;
class BankAccount extends Thread
{
private JLabel lsv=new JLabel("money2 save/time"),
lsp=new JLabel("money2 spen/time");
private JTextField tsv=new JTextField("100",10),
tsp=new JTextField("9",10);
private Saver t=new Saver();
private Spender s=new Spender();
Object m=new Object();
public BankAccount()
{
JPanel p=new JPanel();
tsv.addActionListener(new SaveL());
tsp.addActionListener(new SpenL());
p.add(lsv);
p.add(tsv);
p.add(lsp);
p.add(tsp);
getContentPane().add(p);
}
public void start()
{
if(!started)
{
started=true;
super.start();
t.start();
s.start();
}
}
public synchronized void run()
{
while(true)
{
curBalance.setText(Double.toString(balance));
try {sleep(100);}
catch(InterruptedException e){System.err.println("INTERRUPTED");}
}
}
class Saver extends Thread
{
public Saver(){}
public void run()
{
while(true)
{
synchronized(m)
{
balance+=saveBal;
try{ sleep(1000);}catch(InterruptedException e){}
if(balance>spenBal)
{
canget=true;
m.notify();
}
}
}
}
}
class Spender extends Thread
{
public Spender(){}
public void run()
{
while(true)
{
synchronized(m)
{
if((balance-spenBal)<0)
try{m.wait();}catch(InterruptedException e){}
balance-=spenBal;
try{sleep(500);}catch(InterruptedException e){}
}
}
}
}
class SaveL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
saveBal=Double.parseDouble(tsv.getText());
}
}
class SpenL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
spenBal=Double.parseDouble(tsp.getText());
}
}
}
class StartL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
bk.start();
}
}
public void init()
{
Container cp=getContentPane();
cp.setLayout(new FlowLayout());
bk=new BankAccount();
JPanel p=new JPanel();
start.addActionListener(new StartL());
p.add(start);
p.add(curBalance);
cp.add(p);
}
public static void main(String [] args)
{
Banking applet=new Banking();
Console.run(applet,500,150);
}
}
Top
5 楼fightboy(眼泪哗哗的)回复于 2002-05-26 17:28:12 得分 0 当然安全的做法就是使用wait和notifyAll。
你为什么要中断和继续线程呢?
需要一个理由,
而这个理由就是wait的东西,以及nitifyAll的时机
Top
6 楼fightboy(眼泪哗哗的)回复于 2002-05-26 17:34:08 得分 0 不赞成使用suspend()和resume()的原因就是为了安全性。
就用wait和nofityAll 或者notify代替
实际上你让一个线程等待和唤醒他,都是有一定的原因的。
或者是为了同步,或者是为了异步
而这个条件满足时候,就正好调用wait
唤醒的时候就调用notifyAll
感觉非常自然。
相关推荐
在编程领域,线程是操作系统分配CPU执行时间的基本单元,特别是在多任务环境下,线程管理是实现并发执行的关键。易语言作为一款中国本土的编程工具,提供了丰富的内建支持来处理线程操作,如创建、暂停、恢复和销毁...
在本文中,我们将深入探讨如何在Microsoft Visual C++ 6.0(简称VC6.0)环境下进行多线程编程,特别关注线程的创建、暂停、停止以及线程间的通信。多线程编程是软件开发中的一个重要概念,它允许程序同时执行多个...
本篇文章将深入探讨如何实现线程的协同、停止、暂停以及继续等操作,这些都是多线程编程中的核心概念。 1. **线程的协同(协作式线程调度)** 在Java中,线程的协同主要通过`wait()`和`notify()`或`notifyAll()`...
在多线程环境下,有时候我们需要对线程进行控制,比如暂停或恢复某个线程的执行,以便进行调试、同步或其他操作。标题提到的“暂停线程工具”就是这样一个实用程序,它提供了暂停和恢复线程的功能,并且附带了源代码...
本文将深入探讨如何在具有多个窗口的环境中使用线程来实现文字的同步显示,并掌握如何暂停和恢复线程,这对于理解和优化应用程序性能至关重要。 首先,让我们了解线程的基本概念。线程是程序执行的最小单位,每个...
通过合理利用易语言的Event事件,我们可以实现更复杂的应用逻辑,例如控制多线程的并发执行顺序,处理线程间的同步问题,以及在需要时暂停或恢复特定线程的工作。这种技术在多任务并行处理、实时系统和网络编程等...
C#不提供直接的线程暂停API,但可以通过共享变量或信号量(如`ManualResetEvent`)来间接实现。 例如,一个线程可能在执行到特定点时检查一个共享标志,如果该标志指示应暂停,它就会进入等待状态。其他线程可以...
需要注意的是,由于线程的暂停和恢复操作依赖于循环检测标志位,所以实际上存在一定的延迟,即线程不会立即响应暂停或恢复命令,而是会在当前循环迭代结束后才作出反应。对于需要即时响应的应用场景来说,这一点需要...
在Android开发中,为了提供更好的用户体验,我们常常需要实现文件的多线程断点下载功能。这不仅可以提高下载速度,还能允许用户在任何时候暂停或继续下载。本篇将重点讲解如何利用Retrofit库和GreenDao数据库来实现...
这是因为线程暂停和恢复在多线程环境中可能导致死锁或其他难以预测的问题。不过,可以使用同步对象(如条件变量、事件对象或信号量)来实现类似的功能。 例如,可以使用`std::condition_variable`来暂停和唤醒线程...
但在多线程环境中,由于线程间的并发执行,直接传递可能会引发数据不一致的问题。易语言提供了一种安全的方式来传递参数,即通过“线程参数”数据结构。创建线程时,我们可以将需要传递的数据封装到线程参数中,确保...
"鱼刺框架"的稳定特性意味着它在设计时考虑了线程安全性和资源管理,确保在多线程环境下不会出现竞态条件、死锁或其他常见的并发问题。这些特性通常包括锁机制(如互斥量、读写锁)、信号量、条件变量等同步原语,...
标题中的“pb9多线程控件”指的是在PowerBuilder 9.0(PB9)环境中,使用的一种能够实现真正多线程功能的组件或技术。PowerBuilder是一款经典的面向对象的开发工具,主要用于构建数据库应用系统。在PB的早期版本中,...
### Delphi多线程的安全问题分析及解决 #### 摘要 本文深入探讨了Delphi环境下多线程运行过程中可能遇到的安全问题及其解决方案。在Windows操作系统中,多线程技术因其高效性和灵活性而被广泛应用于软件开发之中。...
在C#编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高效率和响应性。在处理耗时操作如打印时,多线程尤其有用,可以确保用户界面不会被阻塞,提供更好的用户体验。本文将深入探讨如何在C#...
多线程也有其挑战,比如线程间的数据共享可能导致竞态条件、死锁等问题,需要使用锁或其他同步机制来避免。此外,线程创建、销毁和管理也消耗资源,过多的线程可能会导致系统性能下降。 在实际编程中,如何选择单...
这个压缩包中的"多线程5.e"文件很可能包含了一个完整的多线程创建和管理模块,可能包括了线程启动、暂停、恢复和销毁等操作的函数或过程。 线程的启动是多线程编程的第一步,通常涉及到一个入口函数,该函数定义了...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...
同时,需要处理线程同步问题,例如使用Mutex、Semaphore或Event对象来防止数据竞争和死锁。 二、PB12.5的多线程支持 PB12.5引入了对多线程的更好支持,它引入了一个名为“Worker Thread”的新概念。开发者可以创建...
在这个主题中,我们将深入探讨一个多线程示例程序以及在使用多线程时可能遇到的常见问题。 首先,我们来看标题中提到的"一个多线程示例程序"。在C++Builder中,创建多线程通常涉及使用`TThread`类,这是VCL(Visual...