设计四个线程,其中两个线程每次给增加j增加一,另外两个给j减一。
package martina.TraditionalThread;
/**
* 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。
* 方式一:调用两个继承了Runnable类的类进行数据的加减操作
*/
public class ThreadScopeDataTest{
public static Integer i = 10;
public static void main(String[] args){
new Thread(new Incre(i)).start();
new Thread(new Decre(i)).start();
}
static class Incre implements Runnable {
public static Integer i;
public Incre(Integer i){
this.i=i;
}
@Override
public void run() {
while(true) {
i++;
System.out.println("Incre :"+i);
if(i>30) break;
}
}
}
static class Decre implements Runnable {
public static Integer i;
public Decre(Integer i){
this.i=i;
}
@Override
public void run() {
while(true) {
i--;
System.out.println("Decre:"+i);
if(i<0) break;
}
}
}
}
方式二
package martina.TraditionalThread;
/**
-
设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。
-
将操作放在一个类中,用两个线程实现类中的两个方法
*/
public class ThreadScopeDataTest01 {public static void main(String[] args){
new Thread(new Runnable() {
@Override
public void run() {
SharedData1.drecrease();
//System.out.println(" SharedData1.drecrease():"+SharedData1.i);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
SharedData1.increment();} }).start();
}
}
class SharedData1{
public static Integer i=10;
public static void increment(){
while(i<30){
i++;
System.out.println(" SharedData1.increment():"+SharedData1.i);
}
}
public static void drecrease(){
while(i>0){
i--;
System.out.println(" SharedData1.decrease():"+SharedData1.i);
}
}
}
方式三:将实现加减操作的类放在main方法的类中(也就是内部类的实现)
但是以上方法都没有实现加减操作的轮替执行。
标答:
package martina.TraditionalThread;
/**
-
设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。
*/
public class ThreadScopeDataTest02 {
public static Integer i = 10;public static void main(String[] args){
ThreadScopeDataTest02 tt=new ThreadScopeDataTest02();
Incre incre=tt.new Incre(i);
Decre decre=tt.new Decre(i);
for(int i=0;i<2;i++) {
new Thread(incre).start();
new Thread(decre).start();
}
}
synchronized void incre(){
i++;
System.out.println(Thread.currentThread().getName()+“Incre :”+i);
}
synchronized void decre(){
i–;
System.out.println(Thread.currentThread().getName()+“Decre :”+i);
}
class Incre implements Runnable {
public Integer i;
public Incre(Integer i){
this.i=i;
}@Override public void run() { for(int i=0;i<20;i++) { incre(); } }
}
class Decre implements Runnable {
public Integer i;
public Decre(Integer i){
this.i=i;
}
@Override
public void run() {
for(int i=0;i<20;i++) {
decre();
}
}}
}