java笔试题:用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。
我写了如下程序,感觉是对的,欢迎指正!
package thread2;
public class Mythread implements Runnable{
private int temp =100;
@Override
public void run() {
if(Thread.currentThread().getName().equals("Thread-2")
||Thread.currentThread().getName().equals("Thread-3")){
jiajia();
}else if(Thread.currentThread().getName().equals("Thread-0")
||Thread.currentThread().getName().equals("Thread-1")){
jianjian();
}
}
public synchronized void jiajia(){
temp++;
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+" temp 被加上1,现在temp="+temp);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized void jianjian(){
temp--;
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+" temp 被减去1,现在temp="+temp);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package thread2;
public class ThreadTest {
public static void main(String[] args) {
Mythread mythread = new Mythread();
new Thread(mythread).start();
new Thread(mythread).start();
new Thread(mythread).start();
new Thread(mythread).start();
}
}
输出结果:
Thread-0 temp 被减去1,现在temp=99
Thread-3 temp 被加上1,现在temp=100
Thread-2 temp 被加上1,现在temp=101
Thread-1 temp 被减去1,现在temp=100
我看了一些相关的例子,总结了一下:
①一个主类A,有主函数,
②一个基础类B,基础类中有用synchronized修饰的方法
③一个实现了Runnable接口的线程类C,其中②中的基础类B是③中 类的成员变量,线程类的run方法中对基础类B进行并发访问
注:对于第③点,本例中的基础类就是成员变量temp,在网上有很多其他的例子差不多都是按照这个步骤来的。