我有一个线程正在运行,但从外面我不能绕过一个值来停止该线程.如何在内部发送false/true值Mytest()或调用运行线程公共方法?当我按下按钮1?例如:thread.interrupt(); runnable.stop();或runnable.start();
// Main
public class Main extends JFrame
{
public static Runnable runnable;
public static Thread thread;
private JButton b1 = new JButton("Start/Stop");
public void init()
{
//Execute a job on the event-dispatching thread:
try {
javax.swing.SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
createGUI();
}
});
} catch (Exception e) {
System.err.println("createGUI didn't successfully complete");
}
}
public void createGUI()
{
Container cp = getContentPane();
b1.addActionListener(new button1()); cp.add(b1);
runnable = new Mytest();
thread = …Run Code Online (Sandbox Code Playgroud) 我想知道哪个更适合通过扩展线程类或通过实现Runnable接口来创建线程.为什么?
谢谢..
Java提供了两个创建Thread类的选项,即通过实现Runnable或扩展Thread类.
我知道实现Runnable可能有很多原因,但不确定将Thread类扩展为创建自己的Thread类的场景?
你能否请我提供一些方案,其中扩展线程似乎是可行的或更好的选择或有利...
线程上有一个 问题,但没有回答我的问题
我试图找出扩展Thread类的可能优点是什么?
这是我描述的另一个问题的一部分:在Java中有两种创建线程的方法
正如此处所述,使用runnable接口有几个好处.我的问题是从Thread类扩展的优势是什么?我想到的唯一优势是可以从Thread类扩展,让我们称之为ThreadExtended类.然后他/她可以在ThreadExtended中添加更多功能(我不知道它可能是什么),然后当他/她想要创建一个线程,而不是从Thread类扩展时,它从ThreadExtended扩展.
使用Thread类而不是Runnable接口有什么优势吗?您是否知道从Thread类扩展的任何类,然后要求用户从这些类扩展,如果他们想要具有多线程功能?
public class ThreadExtended extends Thread{
//override some functions || add more functionality to Thread class
}
public class MyThread extends ThreadExtended{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("Using ThreadExtended instead of Thread directly");
}
}
public static void main(String args[])
{
MyThread myThread = new MyThread();
myThread.start();
}
}
Run Code Online (Sandbox Code Playgroud) 我接受采访时,面试官首先问我抽象类与抽象方法和界面之间的区别.
我回答说,如果将来要求继承某些内容,如果你已经扩展了课程,那么你将无法继续.
然后,他说这是一种情况,人们永远不必延长任何其他阶级,你必须实施合同.在这种情况下,哪个更好,一个抽象类或接口?
我告诉他你可以使用其中任何一个,但他不满意.我无法理解为什么 - 我相信这是开发人员/设计选择.
我只是学习关于线程的理论.还有Thread和Runnable.
class A extends Thread{
public void run(){
while(true) {
System.out.println("Hi");
}
}
}
Run Code Online (Sandbox Code Playgroud)
class B implements Runnable{
public void run(){
System.out.println("Hi");
}
}
Run Code Online (Sandbox Code Playgroud)
线程很好用丰富的API,为什么我会使用Runnable而不是Thread?
谢谢.
在java中创建线程时,有两种方法,如扩展线程和实现可运行的接口.我不知道哪个是更好的创建线程的方法?
我正在尝试实现一个,基于本教程从a SurfaceView调用它的onDraw()方法.在我开始运行以下代码后,我的应用程序正在提供ANR.Thread
我尝试过实现Runnable,而不是扩展Thread但它仍然给出了ANR.
据我所知,当ANR发生时,应用程序上没有其他任何东西在运行.(ANR仅在我添加此代码时才开始发生:)
package com.thunderrabbit.run;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class MainThread extends Thread {
private final String TAG = this.getClass().getSimpleName();
// desired fps
private final static int MAX_FPS = 50;
// maximum number of frames to be skipped
private final static int MAX_FRAME_SKIPS = 5;
// the frame period
private final static int FRAME_PERIOD = 1000 / MAX_FPS;
private SurfaceHolder surfaceHolder;
private PageGLSurfaceView gamePanel; …Run Code Online (Sandbox Code Playgroud) 我目前正在处理的应用程序使用导航抽屉,每个选项卡在活动中打开一个新片段(替换旧片段).
其中一个片段是Unity3D场景.基本上,我做的是:
将此UnityPlayerNativeActivity转换为Fragment,如下面的代码所示.我还改变了Manifest中的一些小问题.
import com.unity3d.player.*;
import android.app.Fragment;
import android.app.NativeActivity;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
public class UnityPlayerNativeFragment extends Fragment
{
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
private static final String ARG_SECTION_NUMBER = "section_number";
public static UnityPlayerNativeFragment newInstance(int sectionNumber) {
UnityPlayerNativeFragment fragment = new UnityPlayerNativeFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
// …Run Code Online (Sandbox Code Playgroud)在我的程序中,我有一个n项目列表.
我将迭代列表并启动这样的过程:
Runtime.getRuntime.exec("cmd /C start abc.bat"+listitem() )
Run Code Online (Sandbox Code Playgroud)
我需要保持4个进程的计数.完成任何一个过程后,我需要启动下一个过程,因此过程计数应为4.
我能够同时启动4个进程,但不确定如何保持4的计数.基本上我需要一个通知,一旦进程终止,所以我可以开始下一个,任何线程都是可能的.
有关如何实现这一点的任何帮助,有人可以分享上述要求的片段吗?