我有一个查询,就是我在多个线程下面开发了一个代码,这些线程分别称为线程一和线程二,下面是代码..
类multip实现Runnable {
public void run() { for (int i = 0; i < 20; i++) { try { Thread.sleep(500); System.out.println(Thread.currentThread().getName()); System.out.println("i"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class MultiThread3 { public static void main(String... a) { multip obj = new multip(); Thread t1 = new Thread(obj); t1.currentThread().setName("one"); t1.start(); Thread t2 = new Thread(obj); t2.currentThread().setName("two"); t2.start(); } }
现在,我希望将线程2设置为守护程序线程,它应该为线程1提供某种服务,它可以是任何类型的服务,但最后我试图实现的是,守护程序线程向非守护程序线程提供某种服务。请告知如何实现。问题是有关守护程序线程将如何向非守护程序线程提供服务的问题。
问题是关于守护程序线程将如何向非守护程序线程提供服务
我会使用执行程序服务。如果要从守护线程返回值,可以使用a Callable<ReturnType>而不是a Runnable。
Callable<ReturnType>
Runnable
// creating a thread pool. ExecutorService service = Executors.newSingleThreadExecutor(new ThreadFactory() { @Override public Thread newThread(Runnable r) { // creating a thread. Thread two = new Thread(r, "two"); // making it a daemon thread. two.setDaemon(true); return two; } }); for(int i=0;i<10;i++) // creating a task and submitting it. service.submit(new Runnable() { @Override public void run() { System.out.println("["+Thread.currentThread().getName()+"] - Hello World."); Thread.yield(); } }); service.shutdown();
版画
[two] - Hello World. [two] - Hello World. [two] - Hello World.
首先,它创建一个带有工作队列的线程池。线程池具有创建线程的因素,在这种情况下,线程池具有给定名称的守护程序。
其次,存在一个循环,该循环将10个任务添加到队列中以便执行程序线程执行。
最后,它在完成服务后就停止了该服务(这很少需要)