Tôi gặp lỗi tại dòng 42 và 43: Thread t1=new Thread(()->prod.test());
, Thread t2=new Thread(()->cons.test());
Loại ngoại lệ bị loại trừ InterruptedException. Nếu tôi cố gắng nhanh chóng nó sẽ tạo ra thử bắt với một bắt ngoại lệ bắt, nó sẽ có lỗi tương tự và sẽ cố gắng sửa chữa nó trong cùng một cách tiếp tục bao quanh nó với thử bắt.Chủ đề có biểu thức Lambda
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
interface Predicate {
public void test() throws InterruptedException;
}
class MyClass {
int num = 0;
Lock lock = new ReentrantLock();
public void produce() throws InterruptedException {
lock.lock();
for (int i = 0; i < 1000; i++) {
num++;
Thread.sleep(1);
}
lock.unlock();
}
public void consume() throws InterruptedException {
lock.lock();
for (int i = 0; i < 1000; i++) {
num--;
Thread.sleep(1);
}
lock.unlock();
}
public int getNum() {
return num;
}
}
public class Main00 {
public static void main(String[] args) throws InterruptedException {
MyClass c = new MyClass();
Predicate prod = c::produce;
Predicate cons = c::consume;
Thread t1 = new Thread(() -> prod.test());
Thread t2 = new Thread(() -> cons.test());
long start = System.currentTimeMillis();
t1.start();
t2.start();
t1.join();
t2.join();
long end = System.currentTimeMillis();
System.out.println("time taken " + (end - start) + " num = "
+ c.getNum());
}
}