关于synchronized实现进程同步的问题,新人求解!!!

花开花落半春秋 花开花落半春秋 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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();
}
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
花开花落半春秋
Java SE 62,620 成员 307,251 内容