所以在试图完成我的h. w,有一件事对我来说还不顺利。在这个程序中,我使用了2个类,这是一个跑步的压缩,我只是想宣布一个赢得比赛的玩家的位置。
例如:我们有4个线程。如果第二个线程最后达到100米,我想发布消息说他排在第四位。
参赛者类别:
package assig1_2;
public class Racer extends Thread{
public static int globalid = 1;
private int id;
private int speed;
private Track track;
public Racer(int Speed,Track track) {
this.speed = Speed;
this.track = track;
this.id = this.globalid;
this.globalid++;
}
public void run() {
go ();
}
void go () {
this.track.setPriority(this.speed);
for(int i=1; i<=10; i++) {
System.out.println("runner " + this.id + " run " + i + " meters " );
if (i == 10) {
this.track.setPlace(id);
System.out.println("Runner " + this.id + " finished " + track.getPlaceNumber() + track.getPlaceName() );
}
}
}
}
轨道等级:
package assig1_2;
public class Track extends Thread {
private int finishedRacers;
public String place;
public void setPlace(int numOfPlace) {
if (numOfPlace == 1) {
this.finishedRacers = numOfPlace;
this.place = "st";
} else if (numOfPlace == 2) {
this.finishedRacers = numOfPlace;
this.place = "nd";
} else if (numOfPlace == 3) {
this.finishedRacers = numOfPlace;
this.place = "rd";
} else {
this.finishedRacers = numOfPlace;
this.place = "th";
}
}
public int getPlaceNumber() {
return this.finishedRacers;
}
public String getPlaceName() {
return this.place;
}
}
在我们的第一课中,当我们使用线程时,它是一个愚蠢的程序。
这是主要问题。我们不能通过添加来改变其中的某些东西。
package assig1_2;
公共类assig1_2_main{
public static void main(String[] args){
Track track = new Track();
Racer racer1 = new Racer(10, track);
Racer racer2 = new Racer(2, track);
Racer racer3 = new Racer(3, track);
Racer racer4 = new Racer(7, track);
Thread t1 = new Thread(racer1);
Thread t2 = new Thread(racer2);
Thread t3 = new Thread(racer3);
Thread t4 = new Thread(racer4);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
我对您的程序做了一些更改,并引入了AtomicInteger和ExecutorService。赛道等级没有变化。
public class Racer extends Thread {
private static AtomicInteger atomicInteger = new AtomicInteger(0);
private int id;
private int speed;
private Track track;
private Racer(){}
public Racer(int Speed, Track track) {
this.speed = Speed;
this.track = track;
}
public int getPosition(){
return atomicInteger.incrementAndGet();
}
public static void main(String[] args) throws InterruptedException {
ExecutorService service = null;
service = Executors.newFixedThreadPool(4);
for (int i = 1; i <= 4; i++) {
service.execute(() -> {
new Racer(1, new Track()).go();
});
}
service.awaitTermination(3, TimeUnit.SECONDS);
if (service != null) service.shutdown();
}
void go() {
this.track.setPriority(this.speed);
for (int i = 1; i <= 10; i++) {
System.out.println("runner " + Thread.currentThread().getName().substring(7,15) + " run " + i + " meters ");
if (i == 10) {
this.track.setPlace(getPosition());
System.out.println("Runner " + Thread.currentThread().getName().substring(7,15) + " finished " +track.getPlaceNumber() +" "+ track.getPlaceName() );
}
}
} }
问题内容: 我正在尝试使所有子字符串与乘数匹配: 此示例按预期返回最后一个匹配项: 但是,我希望所有的字符串都由匹配,以得到如下内容: 有没有办法通过单个功能来做到这一点? 问题答案: 根据Kobi: PHP不支持捕获同一组 因此,这个问题没有解决方案。
我知道可以使用,现在不推荐使用。类似于咆哮的代码: 另外,也许可以将手动脚本写成字符串,但我怀疑这是否是正确的解决方案。任何创建正确查询的想法都将受到欢迎。
问题内容: 如果我有一个ajax调用(使用回调)取消获取,然后同时运行其他一些代码。当前两个函数都完成时,我将如何拥有第三个函数。我确信通过轮询(setTimeout,然后检查一些变量)很容易,但是我宁愿回调。 可能吗? 问题答案: 您可以为同时运行的AJAX调用和其他代码提供相同的回调,使用变量来跟踪它们的组合进度,然后将它们链接到如下所示的回调:
问题内容: 我正在尝试实现2个线程。我的测试代码试图使用两个线程来执行以下方案: 线程B等待条件 线程A打印“ Hello”五次 线程A通知线程B 线程A等待 线程B打印“再见” 线程B向线程A发出信号 循环开始(x5) 到目前为止,代码将打印“ Hello”五次,然后卡住。从我看过的示例中,我似乎走对了,“锁定互斥锁,等待,由其他线程发出信号,解锁互斥锁,执行操作,循环” 测试代码: 朝着正确方
问题内容: 我了解InterruptedException的功能以及抛出它的原因。但是在我的应用程序中,我在等待仅由我的应用程序知道的线程时得到了它,并且我的应用程序从不调用任何线程,也从未将线程的引用传递给任何人。 所以我的问题是:谁中断了我的线程? 有什么办法说吗?为什么有InterruptedException不包含请求中断的线程名称的原因? 我读到它可能是执行此操作的框架或库,我们使用以下