线程返回值以及线程锁

来源:互联网 发布:阿里云服务器能翻墙么 编辑:程序博客网 时间:2024/06/05 16:27

线程返回值以及线程锁


public String Threads() {Object[] obj = null;//获取从线程中返回的数据ExecutorService exs=Executors.newCachedThreadPool();          ArrayList<Future<Object[]>> al=new ArrayList<Future<Object[]>>();         //submit()方法返回一个Futrue对象,可以通过调用该对象的get方法取得返回值。         al.add(exs.submit(new Thread(string,class)));  //new Thread(string,class)是调用的有参重载那个方法        for(Future<Object[]> fs:al){              try {                 obj=fs.get();//从线程中返回的数据放到obj中            } catch (InterruptedException e) {                  e.printStackTrace();              } catch (ExecutionException e) {                  e.printStackTrace();              }          }  return  null;}


实现一个Thread类


//线程类,必须实现Callable接口,返回类型可以随意定义,根据需求定义public class Thread implements Callable<Object[]>{//如果需要向线程中传值,用private定义一下便可,然后在实现一个有参重载方法private String string;//传的值private Class class;//传的实体类public Thread(String string, Class class) {this.string = string;this.class = class;}@Overridepublic Object[] call() throws Exception { //进入线程锁中执行具体的方法。//如果不需要线程锁,在abc方法中把synchronized去掉便可return abc(string, class);}//synchronized是锁的意思(如有不明白在网上查询一下),我在此处处理高并发。//此方法是线程进来以后如果有线程在执行此方法,那么该线程必须等待,等上一个线程走完以后,该线程才能执行该方法。//举个例子:奥迪,宝马,奔驰同时进入到该线程中,奥迪运气好,奥迪先进入到abc方法中,那么宝马和奔驰必须等奥迪出来,宝马才能进去,等宝马出来奔驰才能<span style="white-space:pre"></span>进去,当然谁先进谁先出是线程自己分配的。public static synchronized Object[] abc(String string, Class class) {//此处是你要处理的代码,最后放入obj中返回便可return obj; } 


1 0