我是线程的新手。我想创建一些与主线程分开工作的简单函数。但它似乎没有用。我只想创建新线程并在那里做一些独立于主线程上发生的事情。这段代码可能看起来很奇怪,但到目前为止我没有太多的线程经验。你能解释一下这有什么问题吗?
public static void main(String args[]){
test z=new test();
z.setBackground(Color.white);
frame=new JFrame();
frame.setSize(500,500);
frame.add(z);
frame.addKeyListener(z);
frame.setVisible(true);
one=new Thread(){
public void run() {
one.start();
try{
System.out.println("Does it work?");
Thread.sleep(1000);
System.out.println("Nope, it doesnt...again.");
} catch(InterruptedException v){System.out.println(v);}
}
};
}
答案 0 :(得分:86)
您正在线程的one.start()
方法中调用run
方法。但只有在线程已经启动时才会调用run
方法。这样做:
one = new Thread() {
public void run() {
try {
System.out.println("Does it work?");
Thread.sleep(1000);
System.out.println("Nope, it doesnt...again.");
} catch(InterruptedException v) {
System.out.println(v);
}
}
};
one.start();
答案 1 :(得分:16)
你可以这样做:
Thread t1 = new Thread(new Runnable() {
public void run()
{
// code goes here.
}});
t1.start();
答案 2 :(得分:10)
目标是编写代码以在一个地方调用start()和join()。
参数匿名类是一个匿名函数。 new Thread(() ->{})
new Thread(() ->{
System.out.println("Does it work?");
Thread.sleep(1000);
System.out.println("Nope, it doesnt...again.");
}){{start();}}.join();
在匿名类的主体中有一个调用start()的instance-block。 结果是一个Thread类的新实例,称为join()。
答案 3 :(得分:7)
你需要做两件事:
即
one.start();
one.join();
如果您没有start()
,则不会发生任何事情 - 创建线程不会执行。
如果你没有join)
,你的主线程可能会完成并退出,整个程序退出之前另一个线程已被安排执行。如果你不加入,它是否运行是不确定的。新线程通常可以运行,但有时可能无法运行。最好确定一下。
答案 4 :(得分:2)
如果你想要创建更多的Thread,在上面的例子中你必须重复run方法中的代码或者至少重复调用一些方法。
试试这个,这将有助于您拨打所需的次数。 当你需要多次执行你的运行时,它会很有帮助。
class A extends Thread {
public void run() {
//Code you want to get executed seperately then main thread.
}
}
主要课程
A obj1 = new A();
obj1.start();
A obj2 = new A();
obj2.start();
答案 5 :(得分:2)
答案 6 :(得分:1)
有几种创建线程的方法
答案 7 :(得分:0)
更简单的方法可以是:
new Thread(YourSampleClass).start();
答案 8 :(得分:0)
请尝试这个。看看我的解决方案后,您会完全理解。
只有两种方法可以在Java中创建线程
带有工具Runnable
class One implements Runnable {
@Override
public void run() {
System.out.println("Running thread 1 ... ");
}
具有扩展线程
class Two extends Thread {
@Override
public void run() {
System.out.println("Running thread 2 ... ");
}
您的主要课程在这里
public class ExampleMain {
public static void main(String[] args) {
One demo1 = new One();
Thread t1 = new Thread(demo1);
t1.start();
Two demo2 = new Two();
Thread t2 = new Thread(demo2);
t2.start();
}
}
答案 9 :(得分:0)
由于刚刚解决了一个新问题:您不应该自己创建Thread
对象。这是另一种方法:
public void method() {
Executors.newSingleThreadExecutor().submit(() -> {
// yourCode
});
}
您可能应该在两次调用之间保留执行程序服务。