Java-一个线程如何控制另外一个线程的运行状态

发布于 2017-01-28 19:01:47 字数 0 浏览 1586 评论 4

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浮生未歇 2017-10-04 12:55:55

这个问题可以理解为进程间通信?线程,应该比进程再容易一些。android中用的是aidl实现进程间通信。handler则可以实现分线程向主线程发送消息。要是单纯java的话?还真没有仔细想过?进程间通信?webService是不是答案呢?线程间通信?java里边main方法是主线程。与其它线程不在同一个线程!通信很难吗?最好把具体问题拿上来。这个问题也太泛泛了。

哥们! 直接上代码~

偏爱自由 2017-05-15 23:09:29

1 如果你是指线程异步通讯,你可以用future,调用get方法来拿到异步执行任务的返回值
2 如果是指并发,可以用java中的线程并发库java.concurrent.*.如下面的几个:

Semaphore:一个计数信号量
ReentrantLock:一个可重入的互斥锁定Lock,功能类似synchronized,但要强大的多。
BlockingQueue:阻塞队列。
CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
CyclicBarrier:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点。

CountDownLatch主要起倒计时计数器作用,它主要有两个方法await()和countDown()。一旦某个线程调用await()方法,那么该线程就会阻塞,等待CountDownLatch计数器倒计时归零,需要注意的是尽管线程调用await()方法后会阻塞,但是CountDownLatch允许别的线程调用countDown()方法,将计数器减一。也就是说调用计时器的线程阻塞后,可以利用别的线程控制调用线程何时从新开始运行。

晚风撩人 2017-05-03 10:19:32

一个线程控制另一个线程, 可以使用Thread类的实例方法suspend, stop, resume, destroy等;但是因为不安全, 已经不建议在Java中使用了.

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

可以看到, suspend, stop, resume, destroy这些可以控制另一个线程的方法, 都已经deprecated了.

http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

另外可以使用java.util.concurrent.FutureTask, 可以cancel一个运行中的task.

类似的问题见我的回答
@Thread类中sleep是为什么是静态方法
@java 中止正在运行的线程

灵芸 2017-03-28 19:48:08

看你的问题,建议你重新全面考虑线程的设计,此为上策。具体去解决问题是下策。

无论何种级别的运用,跨线程的调度都是后患无穷的做法。程序的易读性几乎没有——对于别人和几周后的你。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文