各位帮忙看下程序,我的要求是让子线程执行10次,再让主线程执行10次,为什么程序运行结果是子线程和主线程交替执行public class TestThread { public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
synchronized (TestThread.class) {
new Thread(new Runner()).start();
}
synchronized (TestThread.class) {
for (int j = 0; j < 10; j++) {
System.out.println("主线程: " + i);
}
}
}
}
}class Runner implements Runnable { @Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println("子线程执行了: " + i);
}
}
}
非常感谢!
for (int i = 0; i < 10; i++) {
synchronized (TestThread.class) {
new Thread(new Runner()).start();
}
synchronized (TestThread.class) {
for (int j = 0; j < 10; j++) {
System.out.println("主线程: " + i);
}
}
}
}
}class Runner implements Runnable { @Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println("子线程执行了: " + i);
}
}
}
非常感谢!
解决方案 »
- jni FindClass返回null
- 关于表达式求值的,求帮忙
- 讨论一个时间转换的难题,大家讨论
- 如何学习java网络编程比如socket
- 有几种创建对象的方法
- 关于Frame的windowsListener原理的疑问
- 求助:按钮响应指定文本文件
- 求助:有从扫描仪器得来的binary的xxx.img文件,如何把它转化成图片
- 100分求耿祥义的《java2实用教程(第2版)》电子版,三天内有效!!!
- 关于gc回收的一点问题
- 关与在线聊天,--看了马士兵的视频,怎么就做不对。。。
- 员工类, 有姓名, 年龄, 薪水三个成员属性需要私有并提供get, set方法, 可以通过构造函数进行初始化,并且按照薪水排序 有一句报错
上面你的两段共同使用一个锁的代码,其实都是在主线程里执行的。如果只是简单的,启动一个子线程,然后主线程先执行10步,再让子线程运行,修改下代码,把 synchronized (TestThread.class) 加到 Runner.run()方法里即可如果要做到2个线程交替执行,必须采用类似于信号灯的概念来指示当前让谁执行.
{
public static void main(String[] args)
{
for (int i = 0; i < 10; i++)
{
new Thread(new Runner()).start(); //这不加锁。
//主线程休眠10ms,让子线程得到先执行的机会。
try
{
Thread.sleep(10);
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
synchronized (TestThread.class)
{
for (int j = 0; j < 10; j++)
{
System.out.println("主线程: " + i);
}
}
}
}
}class Runner implements Runnable
{
@Override
public void run()
{
synchronized(TestThread.class) //在这加。
{
for (int i = 1; i <= 10; i++)
{
System.out.println("子线程执行了: " + i);
}
}
}
}
在线程同步里有一个叫做Monitor的东西 可以结合做东西时候的异常显示先搞清楚它是干什么的