这个问题可以理解为进程间通信?线程,应该比进程再容易一些。android中用的是aidl实现进程间通信。handler则可以实现分线程向主线程发送消息。要是单纯java的话?还真没有仔细想过?进程间通信?webService是不是答案呢?线程间通信?java里边main方法是主线程。与其它线程不在同一个线程!通信很难吗?最好把具体问题拿上来。这个问题也太泛泛了。
哥们! 直接上代码~
1 如果你是指线程异步通讯,你可以用future,调用get方法来拿到异步执行任务的返回值2 如果是指并发,可以用java中的线程并发库java.concurrent.*.如下面的几个:
Semaphore:一个计数信号量ReentrantLock:一个可重入的互斥锁定Lock,功能类似synchronized,但要强大的多。BlockingQueue:阻塞队列。CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CyclicBarrier:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点。
CountDownLatch主要起倒计时计数器作用,它主要有两个方法await()和countDown()。一旦某个线程调用await()方法,那么该线程就会阻塞,等待CountDownLatch计数器倒计时归零,需要注意的是尽管线程调用await()方法后会阻塞,但是CountDownLatch允许别的线程调用countDown()方法,将计数器减一。也就是说调用计时器的线程阻塞后,可以利用别的线程控制调用线程何时从新开始运行。
一个线程控制另一个线程, 可以使用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 中止正在运行的线程
看你的问题,建议你重新全面考虑线程的设计,此为上策。具体去解决问题是下策。
无论何种级别的运用,跨线程的调度都是后患无穷的做法。程序的易读性几乎没有——对于别人和几周后的你。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
这个问题可以理解为进程间通信?线程,应该比进程再容易一些。android中用的是aidl实现进程间通信。handler则可以实现分线程向主线程发送消息。要是单纯java的话?还真没有仔细想过?进程间通信?webService是不是答案呢?线程间通信?java里边main方法是主线程。与其它线程不在同一个线程!通信很难吗?最好把具体问题拿上来。这个问题也太泛泛了。
哥们! 直接上代码~
1 如果你是指线程异步通讯,你可以用future,调用get方法来拿到异步执行任务的返回值
2 如果是指并发,可以用java中的线程并发库java.concurrent.*.如下面的几个:
Semaphore:一个计数信号量
ReentrantLock:一个可重入的互斥锁定Lock,功能类似synchronized,但要强大的多。
BlockingQueue:阻塞队列。
CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
CyclicBarrier:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点。
CountDownLatch主要起倒计时计数器作用,它主要有两个方法await()和countDown()。一旦某个线程调用await()方法,那么该线程就会阻塞,等待CountDownLatch计数器倒计时归零,需要注意的是尽管线程调用await()方法后会阻塞,但是CountDownLatch允许别的线程调用countDown()方法,将计数器减一。也就是说调用计时器的线程阻塞后,可以利用别的线程控制调用线程何时从新开始运行。
一个线程控制另一个线程, 可以使用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 中止正在运行的线程
看你的问题,建议你重新全面考虑线程的设计,此为上策。具体去解决问题是下策。
无论何种级别的运用,跨线程的调度都是后患无穷的做法。程序的易读性几乎没有——对于别人和几周后的你。