Недавно я начал изучать Java, и теперь я использую мой язык по выбору в моем классе параллельного программирования в uni.Перегрузка конструктора класса Thread в Java
Я работал над назначением лаборатории, которое требует от меня запускать несколько потоков и запускать их в определенном порядке. Вот код:
import java.util.concurrent.CountDownLatch;
class Lab1{
public static void main(String[] args){
CountDownLatch leftLatch = new CountDownLatch(3);
CountDownLatch midLatch = new CountDownLatch(1);
LabThread t1 = new LabThread();
new Thread(t1).start();
// (new Thread(new LabThread(new CountDownLatch(1),leftLatch,1))).start();
// (new Thread(new LabThread(new CountDownLatch(0),leftLatch,2))).start();
// (new Thread(new LabThread(new CountDownLatch(0),leftLatch,3))).start();
// (new Thread(new LabThread(leftLatch,midLatch,4))).start();
// (new Thread(new LabThread(midLatch,new CountDownLatch(0),5))).start();
// (new Thread(new LabThread(midLatch,new CountDownLatch(0),6))).start();
// (new Thread(new LabThread(midLatch,new CountDownLatch(0),7))).start();
}
}
public class LabThread implements Runnable{
CountDownLatch waitLatch = null;
CountDownLatch decLatch = null;
int threadNr;
public LabThread(CountDownLatch waitLatch, CountDownLatch decLatch,int threadNr){
this.waitLatch = waitLatch;
this.decLatch = decLatch;
this.threadNr = threadNr;
}
public void run(){
try{
this.waitLatch.await();
this.decLatch.countDown();
}catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadNr);
}
}
Когда я пытаюсь скомпилировать, я получаю эту ошибку:
Lab1.java:12: error: constructor Thread in class Thread cannot be applied to given types;
new Thread(t1).start();
^
required: CountDownLatch,CountDownLatch,int
found: LabThread
reason: actual and formal argument lists differ in length
1 error
Я знаю, что это довольно понятно, но я просто не смог найти обходной путь. Я пробовал много вещей: избавиться от перегруженного конструктора, расширив Thread вместо внедрения Runnable, все, что я думал, может помочь, но он просто продолжает прослушивать меня с этой же ошибкой, и это просто становится действительно абсурдным. Если вы знаете решение, p lease делитесь своей мудростью со мной на этом!
P.S: Я знаю, что моя логика может быть немного недостатков, но я займусь, что после того, как он компилирует :)
EDIT: * ПРОБЛЕМА решаемые *! Очевидно, все, что мне нужно было сделать, это очистить мой проект (удалить файлы классов) и скомпилировать его снова. Большое спасибо Tom Hawtin - tackline и fazomisiek за предложение сделать это. Я не понимал, что оставить старые файлы имело какой-либо эффект при компиляции заново. Виноват ! :) Спасибо всем за ваши предложения, не ожидал получить ответ так быстро
Удивлен, что вы не получили эту ошибку для 'new LabThread()' –
Я бы предположил, что вы изначально называли LabThread' Thread'. Удалите все ваши файлы '.class' и повторите попытку. –
Ничего себе. Я удалил все мои файлы .class, и теперь он компилируется. Забавно, как это получилось! Большое спасибо, Том! На ваш комментарий, но у меня еще нет нужной репутации :) Приветствия! –