「java多线程返回值」java 多线程返回值

博主:adminadmin 2022-12-01 04:49:05 70

今天给各位分享java多线程返回值的知识,其中也会对java 多线程返回值进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 多线程 有返回值怎么实现

作为一个完全面向对象的语言,Java提供了类 Java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。 Thread 类最重要的方法是 run()

JAVA多线程问题,想让每次线程运行后都能返回值给成员变量,要如何修改

把a定义成公共的,在thread里i++时,a也跟着++就行,,不过你的代码怎么构造出了好几个线程???如果这几个线程公用一个i变量,那么Thread1需要实现Runnable接口,而不是继承Thread类

public class XianChengNew {

public static int a = 0;

public static void main(String[] args) {

Thread1 t1 = null;

t1 = new Thread1(a);

t1.start();

boolean flag = true;

while (flag){

if ( !t1.isAlive()){

flag = false;

}

}

System.out.println("Main a = " + a);

}

}

class Thread1 extends Thread {

private int i = 0;

public Thread1(int i) {

super();

this.i = i;

}

@Override

public void run() {

// super.run();

// for(int s = 0; s  100; s++) {

add();

// }

}

synchronized void add() {

for (int c = 0; c  5; c++) {

i++;

XianChengNew.a++;

System.out.println("i= " + i);

System.out.println("a= " + XianChengNew.a);

}

}

}

java 线程中的值如何返回

如果是java5的话,那么Java5新增了Callable接口获得线程的返回值,用法如下

package com.ronniewang;  

  

  

import java.util.concurrent.Callable;  

import java.util.concurrent.ExecutionException;  

import java.util.concurrent.ExecutorService;  

import java.util.concurrent.Executors;  

import java.util.concurrent.Future;  

  

  

public class GetReturnValueFromCallable {  

  

  

    private static final int SLEEP_MILLS = 3000;  

  

  

    private static final int SECOND_MILLS = 1000;  

  

  

    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;  

  

  

    ExecutorService executorService = Executors.newCachedThreadPool();  

  

  

    /** 

     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable 

     */  

    public static void main(String[] args) {  

  

  

        new GetReturnValueFromCallable().testCallable();  

    }  

  

  

    private void testCallable() {  

  

  

        /** 

         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定, 

         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象 

         */  

        FutureString future = executorService.submit(new CallableString() {  

  

  

            public String call() throws Exception {  

  

  

                Thread.sleep(SLEEP_MILLS);  

                return "I from callable";  

            }  

        });  

  

  

        while (true) {  

            /** 

             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值, 

             * 如果直接调用get()方法,get()方法将阻塞值线程结束 

             */  

            if (future.isDone()) {  

                try {  

                    System.out.println(future.get());  

                    break;  

                } catch (InterruptedException e) {  

                    // ignored  

                } catch (ExecutionException e) {  

                    // ignored  

                }  

            }  

            else {  

                try {  

                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");  

                    Thread.sleep(SECOND_MILLS);  

                } catch (InterruptedException e) {  

                    // ignored  

                }  

            }  

        }  

    }  

}  

package com.ronniewang;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

public class GetReturnValueFromCallable {

    private static final int SLEEP_MILLS = 3000;

    private static final int SECOND_MILLS = 1000;

    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;

    ExecutorService executorService = Executors.newCachedThreadPool();

    /**

     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable

     */

    public static void main(String[] args) {

        new GetReturnValueFromCallable().testCallable();

    }

    private void testCallable() {

        /**

         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定,

         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象

         */

        FutureString future = executorService.submit(new CallableString() {

            public String call() throws Exception {

                Thread.sleep(SLEEP_MILLS);

                return "I from callable";

            }

        });

        while (true) {

            /**

             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值,

             * 如果直接调用get()方法,get()方法将阻塞值线程结束

             */

            if (future.isDone()) {

                try {

                    System.out.println(future.get());

                    break;

                } catch (InterruptedException e) {

                    // ignored

                } catch (ExecutionException e) {

                    // ignored

                }

            }

            else {

                try {

                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");

                    Thread.sleep(SECOND_MILLS);

                } catch (InterruptedException e) {

                    // ignored

                }

            }

        }

    }

}

输出结果:

after 3 seconds, we will get future

 after 2 seconds, we will get future

 after 1 seconds, we will get future

 I from callable

关于java多线程返回值和java 多线程返回值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。