- 编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。
public class Su {
public static void main(String[] args) throws Exception{
final int[] num = {0};
String s = "锁";
Thread t1 = new Thread(){
@Override
public void run() {
synchronized(s) {
int index;
for (int i = 2; i <= 100000; i++) {
index=0;
for (int j = 2; j < i; j++) {
if(i%j==0){
index++;
}
}
if(index==0){
System.out.println(i);
num[0]++;
}
}
}}
};
Thread t2 = new Thread(){
@Override
public void run() {
synchronized(s){ int index;
for (int i = 100000; i <= 200000; i++) {
index=0;
for (int j = 2; j < i; j++) {
if(i%j==0){
index++;
}
}
if(index==0){
System.out.println(i);
num[0]++;
}
}}
}
};
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("1到200000的素数有"+num[0]+"个");
}
}
- 模拟多线程并发问题,并解决(方式越多越好)
模拟两个人(两个线程),同时在桌子上拿豆子,考虑并发出错情况
//豆子类
public class Bean {
private int num;
public Bean(int num) {
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int rob(){
if(num==0){
throw new RuntimeException("抢完了");
}
int num2 = getNum()-1;
this.setNum(num2);
return getNum();
}
}
//测试豆子类
public class Qiang {
public static void main(String[] args) throws Exception {
Bean b = new Bean(100);
Thread t1 =new Thread(){
@Override
public void run() {
while (true){
b.rob();
System.out.println("t1抢后"+b.getNum());
}
}
};
Thread t2 =new Thread(){
@Override
public void run() {
while (true){
b.rob();
System.out.println("t2抢后"+b.getNum());
}
}
};
t1.start();
t2.start();
}
}