关于synchronized实现进程同步的问题,新人求解!!!
package day12;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 创建10个任务,每个任务分
别输出10个数字,第一个任务输出
1-10,第二个任务输出11-20,一次类
推将所有任务交给线程池处理。
*/
public class Exercise3 {
public static void main(String[] args) {
ExecutorService exec = Executors.newFixedThreadPool(3);
for(int j = 0;j<10;j++)
exec.execute(new MyRunnable());
exec.shutdown();
}
}
class MyRunnable implements Runnable{
private static int threadnum = 1;
public void run(){
show();
}
public synchronized void show(){
System.out.println(Thread.currentThread()+","+threadnum++);
// 如何让其完整输出?
// threadnum++;
for(int i = 1;i<=10;i++)
System.out.print((threadnum-2)*10+i+" ");
System.out.println();
}
}
上述方法输出会出问题,一个线程不是同时输出10个数,但是当我将show方法放到一个类中时,可以正常输出,为何会这样
上面synchronized关键字为何不能保证一次只输出10个数?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 创建10个任务,每个任务分
别输出10个数字,第一个任务输出
1-10,第二个任务输出11-20,一次类
推将所有任务交给线程池处理。
*/
public class Exercise3 {
public static void main(String[] args) {
ExecutorService exec = Executors.newFixedThreadPool(3);
for(int j = 0;j<10;j++)
exec.execute(new MyRunnable());
exec.shutdown();
}
}
class MyRunnable implements Runnable{
private static int threadnum = 1;
public void run(){
Test.show();
}
}
class Test{
private static int threadnum = 1;
public static synchronized void show(){
System.out.println(Thread.currentThread()+","+threadnum++);
// 如何让其完整输出?
// threadnum++;
for(int i = 1;i<=10;i++)
System.out.print((threadnum-2)*10+i+" ");
System.out.println();
}
}