关于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();
}
}
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();
}
}
...全文
相关推荐
Java实现进程同步
Java作为一种强大的多线程编程语言,提供了丰富的API来支持进程同步。本篇文章将深入探讨如何使用Java实现“生产者-消费者”问题的进程同步。
进程同步实验报告
通过这样的实践,我们可以更深刻地理解操作系统中的进程同步概念,为进一步学习和解决更复杂的并发问题打下坚实基础。
进程同步模拟设计--司机和售票员问题
**司机和售票员问题的Java实现**在“java答案.doc”文件中,可能包含了使用Java编程语言实现此问题的代码。
Java实现的进程同步与互斥(PV)
在Java中,我们可以使用上述机制来实现进程同步与互斥,确保多线程程序的正确运行。在实际开发中,根据具体需求选择合适的同步机制是非常重要的,这有助于优化性能,避免死锁等问题。
Java使用synchronized实现互斥锁功能示例
但是,在使用时需要注意锁对象的选择和锁的释放,以避免死锁和其他问题。同时,了解其他实现互斥锁的方法,可以根据实际情况选择合适的方法。


Java SE
