相关疑难解决方法(0)

Android中的线程示例

我想要一些关于线程创建和在android中调用线程的简单示例.

multithreading android

73
推荐指数
3
解决办法
22万
查看次数

线程如何在完成工作后返回值?

假设我们有这个简单的例子:

public Example extends Thread{

    String temp;    

    public Example(){
    }

    @Override
    public void run(){
        .
        .
        .
        .
        temp = "a_value";
    }

    public static void main(String[] args) {

        Example th = new Example();
        th.start();
    }

}
Run Code Online (Sandbox Code Playgroud)

Thread完成工作后怎么能给我返回String temp?

java multithreading

45
推荐指数
3
解决办法
7万
查看次数

如何从java中的线程返回一个值?

在android我正在为url连接创建线程.在线程中我将响应消息存储在全局声明的字符串中.当我访问方法方法时,它返回null.

    public class Rate_fetch {
       String total="";
          public String  rate(String dt)
       {
    new Thread(new Runnable(){ 

         public void run(){


            try  {

             URL url = new URL(tally_ipaddr+"/prorate.jsp?plist="+sss.toString().trim());

             HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
             InputStream in = new BufferedInputStream(urlConnection.getInputStream());
             BufferedReader r = new BufferedReader(new InputStreamReader(in));
             String x = "";
             String total = "";
             x = r.readLine();
             int i=0;

             while(x.length()>1)
             {
                 total=total+x.toString().trim();
                 i++;
                 x = r.readLine();
             }
             }
            catch(Exception e){
             return e.toString();
            }   
        }    

    }).start();

    return total;



}
Run Code Online (Sandbox Code Playgroud)

当我调用该方法时,它返回null.

 Rate_fetch rf=new Rate_fetch();
      String amt= rf.rate(prodList);
Run Code Online (Sandbox Code Playgroud)

java multithreading android

6
推荐指数
1
解决办法
2万
查看次数

使用ExecutorService并行重复执行多个类似的任务

Java 代码简化后如下所示:

while(someCondition)
{
    SomeType a = CalcResult(param1);
    SomeType b = CalcResult(param2);
    SomeType c = CalcResult(param3);

    // Do something with a, b and c
}
Run Code Online (Sandbox Code Playgroud)

CalcResult()很费时间。该应用程序在 SMP 系统上运行。有人试图尝试在自己的 CPU 上同时运行所有三个计算,而不是按顺序运行它们。需要并行的始终是这 3 个任务,而不是任意数量的任务(这就是算法)。每项任务可能比其他任务花费更多或更少的时间,但通常差异不会那么大 (20-30%)。

由于他们需要返回结果,我从/sf/answers/640429471/查看了执行器服务解决方案:

ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Integer> callable = new Callable<Integer>() {
    @Override
    public Integer call() {
        return 2;
    }
};
Future<Integer> future = executor.submit(callable);
// future.get() returns 2
executor.shutdown();
Run Code Online (Sandbox Code Playgroud)

由于我对 Java 的经验主要是 servlet/JSP 开发,所以我没有线程方面的经验,并且不确定该代码片段是否适用于 3 个任务而不是一个任务。

如何提交3个任务,每个任务都有自己的参数值,并等待所有任务都返回计算结果,同时确保为它们创建线程不会抵消在自己的CPU上运行的优势,即是否有一个在循环开始之前创建线程一次while(),然后简单地将新的paramN线程推入循环内的每个线程,唤醒它们,并等待它们执行所有计算的方法?

java concurrency multithreading executorservice

3
推荐指数
1
解决办法
5451
查看次数

使用java(Threads)从方法返回值

我是线程概念的新手,我正在努力学习....

我遇到了一种情况,我有一个方法,它返回一个学生列表......以及其他方法,使用此列表来提取学生的其他详细信息,如ParentsName,他们参与的体育等(基于StudentID)..我尝试使用以下代码返回列表,似乎它不起作用:(

import java.util.ArrayList;

public class studentClass implements Runnable
{
    private volatile List<Student> studentList;

    @Override
    public void run() 
    {
        studentList = "Mysql Query which is returning StudentList(StudentID,StudentName etc)";  
    }

    public List<Student> getStudentList()
    {
        return studentList;
    }
}

public class mainClass 
{
   public static void main(String args[])
   { 
       StudentClass b = new StudentClass();
       new Thread(b).start();
       // ... 
       List<Student> list = b.getStudentList();
       for(StudentClass sc : b)
       {
           System.out.println(sc);
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

我使用此链接 - 从Thread返回值 列表为NULL.
我哪里错了...... ???

java concurrency multithreading

2
推荐指数
1
解决办法
199
查看次数

从线程返回对象

我想知道是否有一个很好的方法可以从正在运行的线程返回对象。在我的android项目中(对于这个问题并不重要),我有以下方法:

public void getFolders()
{
    Thread t = new Thread(new Runnable() 
    {
        @Override
        public void run() 
        {
            List<File> result = new ArrayList<File>();
            Files.List request = null;

            do 
            {
                try 
                {
                    request = service.files().list();
                    request.setQ("'appdata' in parents");

                    FileList files = request.execute();

                    result.addAll(files.getItems());
                    request.setPageToken(files.getNextPageToken());
                } 
                catch (IOException e) 
                {
                    System.out.println("An error occurred: " + e);
                    request.setPageToken(null);
                }
            } 
            while (request.getPageToken() != null && request.getPageToken().length() > 0);
        }   
    });

    t.start();
}
Run Code Online (Sandbox Code Playgroud)

此方法从Internet上获取一些数据并将结果存储在中List<File> result。这就是为什么我不想在UI线程中运行它的原因。现在,我想将此列表返回到我的main方法。做这个的最好方式是什么?

java multithreading return

1
推荐指数
1
解决办法
6489
查看次数

从Java中的Runnable(Thread)获取返回值

这个线程完成后,有没有办法让我传递"r"的值?我相信我在9或10个月之前在另一个项目上做过这个但是对于我而言,我不记得找到代码的项目了.我花了大约5个小时来挖掘代码和谷歌搜索,但是由于我不经常在Java\Android中开发,所以我已经完全放弃了我的想法.

下面是我的代码,以及我上次做这个时的记忆.我有点记得".call()"或".get()",但试图在android文档中找到一些东西.我不确定.我只能找到"可赎回".

public void updateUserProfile(){

if(checkFields(){
//Do Something
}else{
//Do Something
}

}


 public boolean checkFields(){

Boolean r = false;



     Runnable run = new Runnable(){
                    //Boolean r;
                @Override
                public void run() {

                    //Or boolean r;

                    //get value of r.
                    r = php.UpdateProfile.updateProfile(user_id, user_email);
                }
            };

            new Thread(run).start();

            return r; //run.get(r)?
}
Run Code Online (Sandbox Code Playgroud)

java multithreading android runnable

-2
推荐指数
1
解决办法
8271
查看次数