我正在尝试使用合并排序来实现多线程。我让它在将数组切成两半的地方创建新线程。
数组的排序取决于:[数组的大小] vs [创建新线程的次数] 例如:如果我让它在大小为 70 的数组上仅创建两个线程,则数组将被排序,但如果我让它创建 6,它将返回未排序的。我认为可能的一件事是线程没有同步,但我使用了 threadName.join()
这是一些代码:merge.java
import java.util.Random;
public class merge implements Runnable {
int[] list;
int length;
int countdown;
public merge(int size, int[] newList, int numberOfThreadReps, int firstMerge) {
length = size;
countdown = numberOfThreadReps;
list = newList;
if (firstMerge == 1)
threadMerge(0, length - 1);
}
public void run() {
threadMerge(0, length - 1);
}
public void printList(int[] list, int size) {
for (int i = 0; i < size; i++) {
System.out.println(list[i]);
} …Run Code Online (Sandbox Code Playgroud) 我有一个 Runnable 即使条件设置为停止也不会停止。不知道为什么会这样。有时一些线程仍然活着,其他则不是。我已经让它运行了一个多小时,看看它是否会停止,但它不会。它与我传递参数的方式有关吗?
public class ParserWorker implements Runnable {
private BlockingQueue<String> queue = null;
private ZipReader zip = null;
public ParserWorker(BlockingQueue<String> queue, ZipReader zip) {
this.queue = queue;
this.zip = zip;
}
@Override
public void run() {
try {
while (!queue.isEmpty() || !zip.isClosed()) {
String line = queue.take();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是开始一切的课程。
public Start() throws InterruptedException {
File zipFile = new File("C:\\development\\data2.zip");
BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1024);
ZipReader zip = new ZipReader(queue, zipFile); …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取当前位置,以便我可以在我的媒体播放器应用程序中推进搜索栏。但是,每次我打电话:
getSupportMediaController().getPlaybackState().getPosition();
Run Code Online (Sandbox Code Playgroud)
如果媒体正在播放,则返回 0,如果媒体暂停,则返回 -1。我搜索了很多没有成功的解决方案,我尝试了一切。
顺便说一下,我将上面的代码放在一个 runner 中,以便它每 1 秒执行一次。
android runnable android-mediaplayer android-seekbar android-mediasession
我有一个简单的应用程序,它在后台更新数据,当它更新时,它会禁用所有其他按钮并启用 TextArea 来显示进度。
脚步:
禁用 mainUI 中的所有其他按钮(按钮名称:plotButton)
启用显示更新已开始的 TextArea(TextArea 名称:infoLogTextArea)
然后只启动更新方法(update() 抛出异常)。
这是代码:
@FXML
public void handleUpdateButton() {
infoLogTextArea.setVisible(true);
infoLogTextArea.appendText("Please wait while downloading data from internet.....\n");
plotButton.setDisable(true);
updateButton.setDisable(true);
if(c!=null) {
Runnable task = new Runnable() {
@Override
public void run() {
// Thread.sleep(10000); -> sleep for 10secs
Platform.runLater(new Runnable() {
@Override
public void run() {
try {
c.updateData();
infoLogTextArea.appendText(c.getErrorLog().toString());
plotLabel.setText(c.getCityData().size()+" cities found and updated from internet");
infoLogTextArea.appendText("Successfully updated the data from Internet\n");
}catch (IOException e) {
infoLogTextArea.setText("Couldnot update the data …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用此线程在时钟上旋转秒针.但问题是当我关闭活动时,线程仍然保持运行.我想停止线程,因此它无法影响设备的Bettry.
下面是我的活动代码,我在旋转时钟的秒针:
public class ClockActivity extends Activity implements OnClickListener{
private Button chimeBtn;
private ImageView img;
private Thread myThread = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.clock_layout);
Runnable runnable = new CountDownRunner();
myThread = new Thread(runnable);
myThread.start();
chimeBtn = (Button) findViewById(R.id.chimeBtn);
chimeBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.chimeBtn:
playSound(R.raw.one_bell);
break;
}
}
public void playSound(int resources){
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), resources);
mp.start();
}
private void doPlay(){
new Thread(new Runnable() {
@Override
public void run() {
// …Run Code Online (Sandbox Code Playgroud) 我创建了一个名为Threadimplements 的类,Runnable但由于某种原因我无法调用start()或sleep()方法.每当我尝试这样做时,我都会收到错误,说这些方法对于类来说是未定义的,并建议我创建它们.所以我创建了一个新项目并复制了一个示例代码,以查看我自己的代码是否有问题,并且我收到了相同的错误.这是示例代码:
class Thread implements Runnable {
private int a;
public Thread (int a) {
this.a = a;
}
public void run() {
for (int i = 1; i <= a; ++i) {
System.out.println(Thread.currentThread().getName() + " is " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我自己的代码:
public class Thread extends PID implements Runnable {
public Thread() {}; // Empty constructor for thread object
public void run() …Run Code Online (Sandbox Code Playgroud) 我一直在编写一个多线程的java程序.在我进步之前,我在思考如何最好地编写程序.
我读了runnable和thread之间的区别以及我们应该使用什么和不应该使用什么.不过我有一个问题.即使线程不共享数据(即相同的可运行类对象),遵循runnable实现进行线程也是好的吗?
我最终会创建不同的可运行对象,从而占用内存.我的另一个想法是池化可运行对象并更改它们保存的值并将其分配给线程.从而仅具有一组可运行的对象,从而更好地利用存储器.
示例代码:
public class MrRunnable implements Runnable {
private String toFireUrl;
MrRunnable(String url){
}
@Override
public void run() {
// do some function here
}
}
public class Main {
public static void main(String[] args) {
// We will create 500 threads
for (int i = 0; i < 500; i++) {
Runnable task = new MrRunnable("some new url");
Thread worker = new Thread(task);
//start the thread
worker.start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里我创建了一个可运行对象的新实例,我的线程不共享数据.那么这种方式是否合理?或者更好的是创建一个可运行的对象池,我让我的线程操纵他们的内容并使用它?
看来这是一个常见问题,但以前的帖子似乎都没有解决我的问题。
我相信我已将其范围缩小到一个问题。使用InputStream的任何应用程序都不会打开,但是我所有其他应用程序都可以正常运行。
该应用程序在Eclipse中运行良好,但是当我尝试运行jar文件时,该窗口甚至无法打开。
任务管理器显示它弹出大约一两秒钟,然后消失。
我已经尝试了导出时处理库的所有三个选项,但没有一个可以解决此问题。
谁能解释一下?
我正在阅读有关函数式编程及其在Java中的实现的内容.我遇到的这个例子与Java中的面向对象编程有一些不同的语法.功能编程是否有一些不同的语法?
public class Hello {
Runnable r1 = ()->(System.out.println(this);};
Runnable r2 = ()->(System.out.println(toString());};
public String toString(){ return “Howdy!”;}
public static void main(String args) {
new Hello().r1.run();
new Hello().r2.run();
}
Run Code Online (Sandbox Code Playgroud)
在完成代码之后,我可以理解括号不匹配,语法与OOP的Java语法不相似.
此代码无法编译并在所有行上给出以下错误:
Hello.java:19: error: class, interface, or enum expected
Runnable r2 = ()->(System.out.println(toString());};
Run Code Online (Sandbox Code Playgroud)
我错过了什么?如果这个程序是正确的,它会打印什么?我在Ubuntu 14.04.3上使用javac 1.8.0_66
谢谢.
我正在尝试从Kotlin中的后台线程更新回收者视图的内容。我没有使用AsyncTask。
这是我的代码,我想知道是否有比这更好的方法:
在我的MainActivity中,我将progressThread作为成员变量。
var progressThread = Thread()
Run Code Online (Sandbox Code Playgroud)
然后在我想首先运行线程的方法中,我正在定义它...就像
progressThread = Thread (
Runnable {
kotlin.run {
try {
while (i <= 100 && !progressThread.isInterrupted) {
Thread.sleep(200)
//Some Logic
runOnUiThread {
//this runs in ui thread
}
i++
}
}catch (e:InterruptedException){
progressThread.interrupt()
}
}
})
Run Code Online (Sandbox Code Playgroud)
之后,我将以与
progressThread.start()
Run Code Online (Sandbox Code Playgroud)
为了停止它,我有一个监听器来取消进度,并且在该监听器的回调中,我写了:
progressThread.interrupt()
Run Code Online (Sandbox Code Playgroud)