标签: java-threads

使用用户交互绘制到画布有点滞后

我开始用Android 学习画布绘图,我想制作一个简单的应用程序.

在应用程序启动时,所谓的"蛇"开始在屏幕上移动,当用户点击屏幕时,"蛇"会改变方向.

我很容易实现这一点,但有一点问题:

当用户点击屏幕时,蛇有时会在特定时刻改变方向,有时仅在几毫秒之后.因此,用户可以清楚地感觉到该相互作用并不像它应该作为响应,蛇的确切转折的时刻是相当不可预知的,即使你专心很辛苦.必须有一些其他方式比我更好地做到这一点.

请检查我的代码,我使用带有RunnableHandler来移动蛇.(在画布上绘图,每次将其设置为视图的背景,即每次使用setContentView设置为我的Activity.

码:

public class MainActivity extends Activity implements View.OnClickListener {

    Paint paint = new Paint();
    Canvas canvas;


    View contentView; ///<The view to set by setContentView

    int moveSize; ///<Sze in px to move drawer to draw another square


    int leftIndex; ///<Indexes for square drawing
    int topIndex;
    int rightIndex;
    int bottomIndex;

    int maxBoundsX; ///<The max number of squares in X axis
    int maxBoundsY; ///<The …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-canvas java-threads

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

如何在ThreadPoolExecutor中访问正在运行的线程?

我有一个运行线程的队列,并希望在执行时公开它的一些数据,以监视进程.

ThreadPoolExecutor提供对其队列的访问,我可以遍历这些对象来调用我的重写toString()方法,但这些只是等待执行的线程.

有没有办法访问当前运行的线程来调用我的方法?或者也许总的来说这个任务有更好的方法?

为了更清楚地说明目的,这里有一些一般性的代码:

public class GetDataTask implements Runnable {
    private String pageNumber;
    private int dataBlocksParsed;
    private String source;
    private String dataType;


    public GetDataTask(String source, String dataType) {
        this.source = source;
        this.dataType = dataType;
    }

    @Override
    public void run() {
        //do stuff that affects pageNumber and dataBlocksParsed
    }

    @Override
    public String toString() {
        return "GetDataTask{" +
            "source=" + source +
            ", dataType=" + dataType +
            ", pageNumber=" + pageNumber +
            ", dataBlocksParsed=" + dataBlocksParsed +
            '}';
    } …
Run Code Online (Sandbox Code Playgroud)

java multithreading threadpoolexecutor java-threads

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

Java在线程的try-catch停止

我正在尝试编写一个代码,当它与我的计算机在同一网络上时,它将返回我的覆盆子的IP.这个想法是让它像Samba一样进行广播(广播解析是最接近原始NetBIOS机制的.基本上,寻找名为Trillian的服务的客户会喊出"哟!Trillian!你在哪里?",等待具有该名称的机器以IP地址回答.来源:Samba团队)

所以这是代码:

public class GetIP {
    static String url; //global so I can access it after the threads are finished

    public class CheckIP extends Thread {
       private String url_test;

        public CheckIP(String url_t) {
            url_test = url_t;
        }

        public void run(){
            try {
                result = getHTML(this.url_test);  //result = the response from the GET request to this.url_test
            } catch (Exception e) {

            }

            if(result <is what I want>) {
                url = this.url_test  
                System.out.println("Flag 1");
                <I'd like to do something here, preferebly kill …
Run Code Online (Sandbox Code Playgroud)

java continue try-catch throw java-threads

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

如何从 Java 中的 ScheduledExecutorService 执行所有挂起的计划任务

我使用 ScheduledExecutorService 在经过一段时间后将事件重新排队回到消息队列中。现在我需要在触发某个事件后执行该执行器的所有计划的挂起任务。

我已经看到可以取消挂起的任务,但我需要在执行器关闭之前运行所有这些任务。有没有办法做到这一点?或者我应该使用不同的策略来安排此任务。

java scheduledexecutorservice java-threads

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

如何在Java应用程序中从Main方法运行线程?

我相信static main方法中使用的变量也应该也是static如此.问题是我根本不能使用this这种方法.如果我没记错的话,我必须用commnad启动线程myThread = new ThreaD(this).

以下代码产生错误,因为我this在线程启动中使用.我在这做错了什么?

package app;

public class Server implements Runnable{

    static Thread myThread;


    public void run() {
        // TODO Auto-generated method stub  
    }

    public static void main(String[] args) {
        System.out.println("Good morning");

        myThread = new Thread(this);



    }


}
Run Code Online (Sandbox Code Playgroud)

java multithreading java-threads

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

Java runOnUiThread和Thread.sleep

我从一个单独的类中有这个方法,当调用结束时,我的ImageView的颜色从红色变为白色.示例代码如下:

public void endOfCall(){

    ((Activity)mContext).runOnUiThread(new Runnable(){
        @Override
        public void run(){
            TargetDetails.oncall.setVisibility(View.VISIBLE);
            TargetDetails.endcall.setVisibility(View.GONE);
        }
    });

    try{
        call.endCall();
    }catch (SipException se) {}

    call.close();

    //this is just a representation; not the actual code
    if(true){
      Thread.sleep(10000);
    }

    //new intent here
}
Run Code Online (Sandbox Code Playgroud)

当它进入'if'条件时,问题就开始了,我将Thread.sleep置于其中.在下面的代码执行之前等待10秒

TargetDetails.oncall.setVisibility(View.VISIBLE);
TargetDetails.endcall.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

我想我在这里错过了关于Thread.sleep的一些东西.我只是想摆脱它,但我不确定除此之外的任何其他选择.救命.谢谢.

java android sip java-threads

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

完成所有提交的任务后关闭Java执行程序而不会阻塞

我想知道是否有办法关闭Java ExecutorService并允许所有提交的任务完成而不阻塞.

更具体地说,我想安排一个Runnable延迟并继续使用代码,而不需要保持ExecutorService对能够关闭它的引用.

以下代码将终止提交的任务,因为它尚未启动:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdown();
...
Run Code Online (Sandbox Code Playgroud)

虽然此代码将阻塞,直到任务完成:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.awaitTermination(timeout, TimeUnit.MILLISECONDS);
...
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdownAfterTerminationWithoutBlocking();
...
code that runs without waiting
Run Code Online (Sandbox Code Playgroud)

我知道这可能使用,Timer但我想知道这是否可能使用ExecutorService

java executorservice scheduledexecutorservice java-threads

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

wait(),notify() - 哪个线程首先解锁?

试图了解wait()notify().我知道线程何时A进入wait()它将被notify()其他线程唤醒.

但究竟会发生什么,如果线程A,B,Cwait()以表示订单?谁会被唤醒notify()?根据我的实验,A线程将首先被唤醒.我是正确的?

这是否意味着系统知道线程的顺序是wait()什么?

java multithreading java-threads

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

Java - 执行 I/O 操作时的线程状态

假设一个 Java 线程执行一些 I/O 操作,比如使用传统的阻塞 Java I/O 读取文件。

问题是:等待时线程的状态是什么?

我不知道它是 RUNNING(进行一些主动等待)还是 WAITING(也许有某种监视器在文件数据准备好时唤醒线程)。

我怎样才能找到它?

谢谢。

java thread-synchronization java-threads

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

停止线程列表

我有一个线程数组列表,如果从 GUI 按下取消按钮,我想停止列表中的所有线程。有没有办法阻止所有这些线程?

List<Thread> threads = new ArrayList<>();
EncryptThread encryptThread = null;
for(int j=0;j<fileEncrytionList.size();j++){
    encryptThread = new EncryptThread();
    encryptThread.setFilePath(fileEncrytionList.get(j));
    encryptThread.setOutPutFile(fileName);
    Thread t = new Thread(encryptThread);
    t.start();
    threads.add(t); 
}

if(cancel button pressed) // stop all threads from arraylist
Run Code Online (Sandbox Code Playgroud)

java swing multithreading java-threads

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