
- 判断完美数
- 多线程打印0和奇偶数
import java.util.HashSet;
public class s05 {
public static void main(String[] args) {
boolean b = Solution.checkPerfectNumber(28);
System.out.println(b); // true
}
}
class Solution {
public static boolean checkPerfectNumber(int num) { // 28
if (num < 4) return false;
int sum = 0;
HashSet set = new HashSet<>();
for (int i = 1; i <= num - 1; i++) {
if ((num % i) == 0 && !set.contains(i) && !set.contains(num / i)) {
set.add(i);
set.add(num / i);
sum += i;
sum += num / i;
}
}
sum -= num;
return sum == num;
}
}
多线程打印0和奇偶数
package ckwd.ps;
import java.util.concurrent.Semaphore;
import java.util.function.IntConsumer;
public class MultiThreadOddEvenZeroTest01 {
}
class ZeroOddEvenTest {
public static void main(String[] args) {
ZeroEvenOdd zeroEvenOdd = new ZeroEvenOdd(21);
new Thread(() -> {
try {
zeroEvenOdd.zero(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
zeroEvenOdd.even(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
zeroEvenOdd.odd(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
class ZeroEvenOdd {
private int n;
private Semaphore zero = new Semaphore(1);
private Semaphore even = new Semaphore(0);
private Semaphore odd = new Semaphore(0);
public ZeroEvenOdd(int n) {
this.n = n;
}
public void zero(IntConsumer printNumber) throws InterruptedException {
for (int i = 1; i <= n; i++) {
zero.acquire(); // 取走1个许可证,代码往下执行
printNumber.accept(0); // 输出0
if (i % 2 == 1) {
odd.release(); // 第1次会给odd信号量1个许可证
} else {
even.release();
}
}
}
public void even(IntConsumer printNumber) throws InterruptedException {
for (int i = 2; i <= n; i += 2) {
even.acquire();
printNumber.accept(i);
zero.release();
}
}
public void odd(IntConsumer printNumber) throws InterruptedException {
for (int i = 1; i <= n; i += 2) {
odd.acquire(); // 第1次得到zero方法给的许可证后,代码继续往下执行
printNumber.accept(i); // 输出1,i目前是1
zero.release(); // 再给zero信号量1个许可证
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)