导航:首页 > 软件知识 > 程序员如何停止线程

程序员如何停止线程

发布时间:2022-12-30 13:36:51

A. java线程问题

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。
在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型,JDK1.5引入了哪些更高阶的并发工具,并发编程常用的设计模式,经典多线程问题如生产者消费者,哲学家就餐,读写器或者简单的有界缓冲区问题。仅仅知道线程的基本概念是远远不够的, 你必须知道如何处理死锁,竞态条件,内存冲突和线程安全等并发问题。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。
许多Java程序员在面试前才会去看面试题,这很正常。因为收集面试题和练习很花时间,所以我从许多面试者那里收集了Java多线程和并发相关的50个热门问题。我只收集了比较新的面试题且没有提供全部答案。想必聪明的你对这些问题早就心中有数了, 如果遇到不懂的问题,你可以用Google找到答案。若你实在找不到答案,可以在文章的评论中向我求助。

B. E语言怎么暂停指定进程的线程!

如果你有多线程支持库

暂停线程()

终止线程()

退出线程()

都可以

注:安装支持库:

运行易语言主程序后1.>点菜单栏-T.工具-L.支持库配置

2.>点击全选按钮-确认即可

C. 多线程是什么

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求 。
最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。

D. Jmeter如何控制线程执行

首先明确如何管理线程执行 -- 使用线程组实现 -- 管理线程的的单位(针对线程按照性质分组管理的结果) -- 方便管理线程 , 控制线程执行
其次,明确执行的顺序 -- 线程执行顺序
1. 并发执行 -- 多线程同时执行 -- 线程启动和结束顺序不一致
2. 顺序执行 -- 多线程先后执行 -- 线程启动和结束顺序一致
最后,怎么让线程执行停下来,这个也是可以控制的
1. 可以通过线程的循环次数 -- 通过循环次数停下脚本执行
2. 也可以通过调度器实现脚本执行的时间控制,设置持续时间,超出停止
这些操作当时在黑马程序员学习的时候,为了设计不同的测试场景,都认真学习和练习了

E. android thread join和stop的区别

stop() 方法是立即停止当前线程, 这样停止的后果是导致stop后的语句无法执行, 有可能资源未释放或者在同步块中调用此方法会导致同步数据会不完整. 所以这样的方法并不安全. 强列建议不要使用此函数来中断线程。
interrupt()方法没有stop那么的粗暴,因为可以用catch捕捉到InterruptedException这个异常。一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait以及可中断的通道上的
I/O
操作方法后可进入阻塞状态),方法调用处抛出InterruptedException异常,抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求。
join() 方法作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在主线程调用了join()方法后面的代码,只有等到子线程结束了才能执行

F. C#如何结束子窗体中的一个使用begininvoke创建的异步线程并关闭子窗口

用EndInvoke方法终止它。 参数就是BeginInvoke方法的返回值

G. java中多线程,时间片是什么意思如果分给线程的时间片不够运行完一个线程怎么办这个线程接下来怎么办

这个时间片是操作系统自己分配的,程序员只需要决定是否启动线程和终止线程就可以了。时间片是并行操作系统中的一个概念,意思是将时间分成多个小片段根据线程优先级采用某些策略以此给不同的线程分配时间片段,从用户的角度来看线程好像是在同时运行一样。现在采用多核系统可以真正的同时运行多个线程了,这里面的分配机制就更加复杂了。写java代码操作不到这么底层的东西。

H. c#如何杀掉线程

  1. 该示例创建一个名为 Worker 的类,该类包含辅助线程将执行的方法 DoWork。这实际上是辅助线程的 Main 函数。辅助线程将通过调用此方法来开始执行,并在此方法返回时自动终止。DoWork 方法如下所示:

  2. public void DoWork()
    {
    while (!_shouldStop)
    {
    Console.WriteLine("worker thread: working...");
    }
    Console.WriteLine("worker thread: terminating gracefully.");
    }

  3. Worker 类包含另一个方法,该方法用于通知 DoWork 它应当返回。此方法名为 RequestStop,如下所示:

  4. public void RequestStop()
    {
    _shouldStop = true;
    }

  5. RequestStop 方法只是将 true 赋给 _shouldStop 数据成员。由于此数据成员由 DoWork 方法来检查,因此这会间接导致 DoWork 返回,从而终止辅助线程。但是,需要注意:DoWork 和 RequestStop 将由不同线程执行。DoWork 由辅助线程执行,而 RequestStop 由主线程执行,因此 _shouldStop 数据成员声明为 volatile,如下所示:

  6. private volatile bool _shouldStop;

  7. volatile 关键字用于通知编译器,将有多个线程访问 _shouldStop 数据成员,因此它不应当对此成员的状态做任何优化假设

  8. 通过将 volatile 与 _shouldStop 数据成员一起使用,可以从多个线程安全地访问此成员,而不需要使用正式的线程同步技术,但这仅仅是因为 _shouldStop 是 bool。这意味着只需要执行单个原子操作就能修改 _shouldStop。但是,如果此数据成员是类、结构或数组,那么,从多个线程访问它可能会导致间歇的数据损坏。假设有一个更改数组中的值的线程。Windows 定期中断线程,以便允许其他线程执行,因此线程会在分配某些数组元素之后和分配其他元素之前被中断。这意味着,数组现在有了一个程序员从不想要的状态,因此,读取此数组的另一个线程可能会失败。

  9. 在实际创建辅助线程之前,Main 函数会创建一个 Worker 对象和 Thread 的一个实例。线程对象被配置为:通过将对 Worker.DoWork 方法的引用传递给 Thread 构造函数,来将该方法用作入口点,如下所示:

  10. Worker workerObject = new Worker();
    Thread workerThread = new Thread(workerObject.DoWork);

  11. 此时,尽管辅助线程对象已存在并已配置,但尚未创建实际的辅助线程。只有当 Main 调用 Start 方法后,才会创建实际的辅助线程:

  12. workerThread.Start();

  13. 此时,系统将启动辅助线程的执行,但这是在与主线程异步执行的。这意味着 Main 函数将在辅助线程进行初始化的同时继续执行代码。为了保证 Main 函数不会尝试在辅助线程有机会执行之前将它终止,Main 函数将一直循环,直到辅助线程对象的 IsAlive 属性设置为 true:

  14. while (!workerThread.IsAlive);

  15. 下一步,通过调用 Sleep 来将主线程中断片刻。这保证了辅助线程的 DoWork 函数在 Main 函数执行其他任何命令之前,在 DoWork 方法内部执行若干次循环:

  16. Thread.Sleep(1);

  17. 在 1 毫秒之后,Main 将通知辅助线程对象,它应当使用 Worker.RequestStop 方法(前面已介绍)自行终止:

  18. workerObject.RequestStop();

  19. 还可以通过调用 Abort 来从一个线程终止另一个线程,但这会强行终止受影响的线程,而不管它是否已完成自己的任务,并且不提供清理资源的机会。此示例中显示的技术是首选方法。

  20. 最后,Main 函数对辅助线程对象调用 Join 方法。此方法导致当前线程阻塞或等待,直到对象所表示的线程终止。因此,直到辅助线程返回后,Join 才会返回,然后自行终止:

  21. workerThread.Join();

  22. 此时,只有执行 Main 的主线程还存在。它会显示一条最终消息,然后返回,从而使主线程也终止。

  23. 下面显示了完整的示例:

  24. using System;
    using System.Threading;

  25. public class Worker
    {
    // This method will be called when the thread is started.
    public void DoWork()
    {
    while (!_shouldStop)
    {
    Console.WriteLine("worker thread: working...");
    }
    Console.WriteLine("worker thread: terminating gracefully.");
    }
    public void RequestStop()
    {
    _shouldStop = true;
    }
    // Volatile is used as hint to the compiler that this data
    // member will be accessed by multiple threads.
    private volatile bool _shouldStop;
    }

    public class WorkerThreadExample
    {
    static void Main()
    {
    // Create the thread object. This does not start the thread.
    Worker workerObject = new Worker();
    Thread workerThread = new Thread(workerObject.DoWork);

    // Start the worker thread.
    workerThread.Start();
    Console.WriteLine("main thread: Starting worker thread...");

    // Loop until worker thread activates.
    while (!workerThread.IsAlive);

    // Put the main thread to sleep for 1 millisecond to
    // allow the worker thread to do some work:
    Thread.Sleep(1);

    // Request that the worker thread stop itself:
    workerObject.RequestStop();

    // Use the Join method to block the current thread
    // until the object's thread terminates.
    workerThread.Join();
    Console.WriteLine("main thread: Worker thread has terminated.");
    }
    }

I. 在java中启动线程使用run()还是start()

启动一个线程用start()方法,使线程所代表的虚拟处理机处于可运行的状态,这意味着它可以有JVM(java虚拟机)来调度和执行,这并不意味着线程就会立即执行。run()方法可以产生必须退出的标志来停止一个线程。

阅读全文

与程序员如何停止线程相关的资料

热点内容
附近人如何群发信息 浏览:653
福建玉器市场什么地方 浏览:202
如何强行停止某程序 浏览:752
9针数据线接口是什么 浏览:950
枣庄技术员证书怎么考有用吗 浏览:634
有正负的波动数据用什么分析 浏览:309
湛江有哪些水产品种 浏览:384
数学十几减九的数学信息是什么 浏览:874
产品销售分享会怎么开头 浏览:380
错版币怎么鉴定拍卖交易 浏览:699
信息化建设是一个什么样的工作 浏览:666
怎么看塑料产品能不能降解 浏览:50
如何整合金融资产交易所 浏览:972
物联网发展核心技术是什么 浏览:492
什么是电网企业代理购电 浏览:303
玉石交易大厅系统开发需要多少钱 浏览:686
医疗信息交换标准是什么意思 浏览:938
如何提高叉车技术 浏览:98
欠钱最少多少可以走法律程序 浏览:585
哪个行业小程序比较多 浏览:18