我目前正在开发一个我必须使用Thread的项目。我第一次使用。所以我的代码有很多问题。
首先,我试图测试我的Thread块是否在同一时间工作。
这是我的测试应用程序。
public class sad extends Thread
{
private String name;
private Thread t1 = new Thread()
{
@Override
public void run()
{
while ( true )
{
System.out.println( "I am thread 1 and working properly" );
}
}
};
private Thread t2 = new Thread()
{
@Override
public void run()
{
while ( true )
{
System.out.println( "I am thread 2 and working properly" );
}
}
};
public void starter()
{
t1.start();
t2.start();
}
}
按钮部分:
btnNewButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
sadObj.starter();
}
});
当我运行这个程序时:
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 1 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
I am thread 2 and working properly
这是输出的限制版本。通常有很多输出,所有输出都是分开的。我的意思是他们必须工作,他们必须打印混合。在我的例子中,他们一个接一个地行事。
在我的项目中,我必须同时做两个完全不同的任务。为了实现这一点,我更喜欢使用2个线程对象。但我认为他们没有完全相同的时间或其中一个等待某些原因。两者都必须连续运行。我的实施是错误的,或者怎么做?
当我在java中搜索Thread时,我已经看到如果计算机CPU有超过1个核心,那么多线程将非常有效。我的CPU是i7-3740M。我认为它至少有4个核心。那么问题是什么?
谢谢 最诚挚的问候
答案 0 :(得分:0)
一般来说,核心通过在单个任务之间快速切换来模拟一次做几件事。
您的系统似乎正在优化工作,选择不做多少切换,允许一个任务运行很多,另一个任务运行很多。这样它不会经常切换(这是一件昂贵的事情)而且你得到一个线程的“运行”,然后是另一个线程的“运行”。
您可以向系统提供“提示”,您可以在特定点向另一个线程提供该提示。它可能为CPU提供更多切换线程的借口。
private Thread t1 = new Thread()
{
@Override
public void run()
{
while ( true )
{
System.out.println( "I am thread 1 and working properly" );
this.yield();
}
}
};
private Thread t2 = new Thread()
{
@Override
public void run()
{
while ( true )
{
System.out.println( "I am thread 2 and working properly" );
this.yield();
}
}
};
但是在一天结束时,线程调度是你无法完全控制的。
PS。您的sad
类不需要扩展Thread,除非它具有自己的run()
方法并且已启动。在你的例子中它没有。