1.Callable<V> :接口,多线程的一种实现方式,重写的call()方法有返回值,需要配合着FutureTask类(实现了Runnable接口)使用:
1 public class CallableTest { 2 public static void main(String[] args) { 3 Test t=new Test(); 4 FutureTask<Integer> f=new FutureTask<>(t); //获取结果,与callable配合着使用 5 new Thread(f).start(); //FutureTask也实现了Runnable接口 6 Integer i= null; 7 try { 8 i = f.get(); //FutureTask的方法,获得个、返回的结果 9 } catch (InterruptedException e) { 10 e.printStackTrace(); 11 } catch (ExecutionException e) { 12 e.printStackTrace(); 13 } 14 System.out.println(i); 15 16 } 17 } 18 class Test implements Callable<Integer>{ //实现Runnable接口,重写call()方法,有返回值 19 int sum=0; 20 @Override 21 public Integer call() throws Exception { 22 for (int i = 0; i <=100; i++) { 23 sum=sum+i; 24 } 25 return sum; 26 } 27 }
2.Semaphore类:信号量
Semaphore s2=new Semaphore(5,true);
Semaphore s1=new Semaphore(5); //两种构造方法,(int,boolean) int:资源的访问量 boolean:是否是公平竞争 //公平竞争:等的越久越先执行
try {
s1.acquire();//请求资源,如果资源不可用该线程阻塞,直到有可用资源为止;
} catch (InterruptedException e) {
e.printStackTrace();
}
s1.release();//释放资源
原文:https://www.cnblogs.com/xbfchder/p/10975146.html