1.编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果
第一个线程:计算2-100000的素数个数
package com.yc123.model;
public class Lx_01_sushu implements Runnable{
@Override
synchronized public void run() {
int sum=0;
int i;
for(i=2;i<100000;i++){
int j=2;
while(i%j!=0){
j++;
}
if(i==j){
sum++;
}
}
System.out.println("素数个数为:"+sum);
}
}
第二个线程:计算100000-200000的素数个数
package com.yc123.model;
public class Lx_01_sushu2 implements Runnable{
@Override
synchronized public void run() {
int sum=0;
int i;
for(i=100000;i<200000;i++){
int j=2;
while(i%j!=0){
j++;
}
if(i==j){
sum++;
}
}
System.out.println("素数个数为:"+sum);
}
}
创建一个测试类
package com.yc123.Test;
import com.yc123.model.Lx_01_sushu;
import com.yc123.model.Lx_01_sushu2;
public class SuShu_Test {
public static void main(String[] args) {
Lx_01_sushu lx1=new Lx_01_sushu();
Lx_01_sushu2 lx2=new Lx_01_sushu2();
Thread t1=new Thread(lx1);
Thread t2=new Thread(lx2);
t1.start();
t2.start();
}
}
结果为:
2.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。考虑到线程的安全性写出程序。
package com.yc123.model;
public class Lx_04_jiajian{
static int num=10;
//加锁同步,保证同意时间只有一个线程操函数
synchronized public int addd(){
num++;
return num;
}
synchronized public int dell(){
num--;
return num;
}
//创建一个线程,实现加一
class add implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行加一:"+addd());
}
}
//创建一个线程用于减一
class del implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行减一:"+dell());
}
}
public static void main(String[] args) {
//创建对象
Lx_04_jiajian lx=new Lx_04_jiajian();
add a=lx.new add();
del d=lx.new del();
for(int i=0;i<2;i++){
Thread t1=new Thread(a);
t1.start();
Thread t2=new Thread(d);
t2.start();
}
}
}
结果: