1)方式1
Test.java
package org.example.testrunnable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class Test implements Runnable {
private CountDownLatch countDownLatch;
public Test(CountDownLatch countDownLatch) {
this.countDownLatch = countDownLatch;
}
public void run() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run=" + Thread.currentThread().getName());
countDownLatch.countDown();
}
}
Main.java
package org.example.testrunnable;
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) {
CountDownLatch c = new CountDownLatch(5);
new Thread(new Test(c)).start();
new Thread(new Test(c)).start();
new Thread(new Test(c)).start();
new Thread(new Test(c)).start();
new Thread(new Test(c)).start();
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main end");
}
}
/*
run=Thread-4
run=Thread-3
run=Thread-1
run=Thread-0
run=Thread-2
main end
*/
公共变量容易放到实现Runnable接口的类中,作为类成员,实现多个Thread共用。
思考 :
继承Thread,当然也可以在类中加一个成员变量,这样多个Thread类持有这个变量,也可以共同访问,只不过可以看出来面向接口编程,必须明确要重写run方法,而且看出来创建了一个线程,更加的直接。
2)方式2 // 内部类