Java 多线程问题 求各位大神解答 Thread的start()方法只能执行一次,你不用那个while循环的,判断要在线程的run()里面写最好你这个写法while循环里同一个Thread执行了很多次,所以会报错 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我刚开始学多线程 不太熟悉public class dddd extends Thread{ static int i=100; public synchronized void run() { while(i>=1) { System.out.println(Thread.currentThread().getName()+" "+i); i--; } } public static void main(String[] args) throws InterruptedException { int i=100; dddd h=new dddd(); Thread a=new Thread(h); Thread b=new Thread(h); Thread c=new Thread(h); Thread d=new Thread(h); Thread e=new Thread(h); a.start(); b.start(); c.start(); d.start(); e.start(); }}这么写也不对啊 能不能帮忙写一下 谢谢 我刚开始学多线程 不太熟悉public class dddd extends Thread{ static int i=100; public synchronized void run() { while(i>=1) { System.out.println(Thread.currentThread().getName()+" "+i); i--; } } public static void main(String[] args) throws InterruptedException { int i=100; dddd h=new dddd(); Thread a=new Thread(h); Thread b=new Thread(h); Thread c=new Thread(h); Thread d=new Thread(h); Thread e=new Thread(h); a.start(); b.start(); c.start(); d.start(); e.start(); }}这么写也不对啊 能不能帮忙写一下 谢谢我从N小时前到现在正在研究多线程。。用Runnable接口呗,可以更好的实现public class dddd implements Runnable{ int i=100; public synchronized void run() { while(i>=1) { synchronized (this){ System.out.println(Thread.currentThread().getName()+" "+i); i--; } } } public static void main(String[] args) throws InterruptedException { dddd h=new dddd(); Thread a=new Thread(h,"a"); Thread b=new Thread(h,"b"); Thread c=new Thread(h,"c"); Thread d=new Thread(h,"d"); Thread e=new Thread(h,"e"); a.start(); b.start(); c.start(); d.start(); e.start(); }} 我刚开始学多线程 不太熟悉public class dddd extends Thread{ static int i=100; public synchronized void run() { while(i>=1) { System.out.println(Thread.currentThread().getName()+" "+i); i--; } } public static void main(String[] args) throws InterruptedException { int i=100; dddd h=new dddd(); Thread a=new Thread(h); Thread b=new Thread(h); Thread c=new Thread(h); Thread d=new Thread(h); Thread e=new Thread(h); a.start(); b.start(); c.start(); d.start(); e.start(); }}这么写也不对啊 能不能帮忙写一下 谢谢另外因为这个过程相当之快,也就只能有一个线程抢到了CPU,然后就完成了,你可以改成查秒的,就能看出来几个线程的并行情况了另外你原来的竟然线程没有名字…… 您这个输出是Thread-1 100Thread-1 99Thread-1 98Thread-1 97Thread-1 96Thread-1 95Thread-1 94Thread-1 93Thread-1 92Thread-1 91Thread-1 90Thread-1 89Thread-1 88Thread-1 87....知道1我的意思是类似于窗口售票的程序就是一次运行一个线程 等卖出票后 在运行另一个线程(可能是自己 也可能是别的线程)然后知道票卖完 就是这样窗口1-----100窗口3-----99窗口2-----98窗口1-----97....知道票售完 最后就可以停止所有线程 您这个输出是Thread-1 100Thread-1 99Thread-1 98Thread-1 97Thread-1 96Thread-1 95Thread-1 94Thread-1 93Thread-1 92Thread-1 91Thread-1 90Thread-1 89Thread-1 88Thread-1 87....知道1我的意思是类似于窗口售票的程序就是一次运行一个线程 等卖出票后 在运行另一个线程(可能是自己 也可能是别的线程)然后知道票卖完 就是这样窗口1-----100窗口3-----99窗口2-----98窗口1-----97....知道票售完 最后就可以停止所有线程public void run()如果有synchronized就会发生这种情况 您这个输出是Thread-1 100Thread-1 99Thread-1 98Thread-1 97Thread-1 96Thread-1 95Thread-1 94Thread-1 93Thread-1 92Thread-1 91Thread-1 90Thread-1 89Thread-1 88Thread-1 87....知道1我的意思是类似于窗口售票的程序就是一次运行一个线程 等卖出票后 在运行另一个线程(可能是自己 也可能是别的线程)然后知道票卖完 就是这样窗口1-----100窗口3-----99窗口2-----98窗口1-----97....知道票售完 最后就可以停止所有线程问题解决了一大半,利用的是外层循环,内层一个判断代码如下:package test;class Window implements Runnable { public void run() { for(int k = 0;k<99;k++){ synchronized(this) { try{ Thread.sleep(100); }catch(Exception e){} if(i>=1) System.out.println(Thread.currentThread().getName() + " " + i--); } } } private int i = 100;}public class Main { public static void main(String[] args) { Window h = new Window(); Thread a = new Thread(h, "a"); Thread b = new Thread(h, "b"); Thread c = new Thread(h, "c"); Thread d = new Thread(h, "d"); Thread e = new Thread(h, "e"); Thread f = new Thread(h, "f"); Thread g = new Thread(h, "g"); a.start(); b.start(); c.start(); d.start(); e.start(); f.start(); g.start(); }}原理我也说不太懂,外层循环至少要保证和i的个数一样才比较科学…… 这几天多线程的问题不少,不能语言交流确实不太好教明白别人怎么写多线程,尴尬。不要在run()里面写synchronized(this),没什么用。 这几天多线程的问题不少,不能语言交流确实不太好教明白别人怎么写多线程,尴尬。不要在run()里面写synchronized(this),没什么用。没用吗?仅就这个代码来说,如果没有synchronized(this),就会导致跳跃性的输出了啊,中间有值会缺失 不好意思没仔细看你的代码,当成实现Thread的代码结构了,这个锁没问题。 清了缓存后数据就没了 Java英文文档,请大家帮忙。 关于UTF-8编码问题 偏难点的 Composite 的滚动条事件 文字不对齐的问题 征求算法(高手请进) 如何用一个.bat文件终止一个后台线程(在线支付) 请问谁知道Jave的这两本书在哪里能找到,谢谢! 除法的时候,取整数的运算叫什么?5/2=3,10/3=4这样的? java初学者问题 怎么使用java.util.prefs?尤其是里面的Preferences 这个注释有什么特别之处?
我刚开始学多线程 不太熟悉
public class dddd extends Thread
{
static int i=100;
public synchronized void run()
{
while(i>=1)
{
System.out.println(Thread.currentThread().getName()+" "+i);
i--;
}
}
public static void main(String[] args) throws InterruptedException
{
int i=100;
dddd h=new dddd();
Thread a=new Thread(h);
Thread b=new Thread(h);
Thread c=new Thread(h);
Thread d=new Thread(h);
Thread e=new Thread(h);
a.start();
b.start();
c.start();
d.start();
e.start();
}
}这么写也不对啊 能不能帮忙写一下 谢谢
我刚开始学多线程 不太熟悉
public class dddd extends Thread
{
static int i=100;
public synchronized void run()
{
while(i>=1)
{
System.out.println(Thread.currentThread().getName()+" "+i);
i--;
}
}
public static void main(String[] args) throws InterruptedException
{
int i=100;
dddd h=new dddd();
Thread a=new Thread(h);
Thread b=new Thread(h);
Thread c=new Thread(h);
Thread d=new Thread(h);
Thread e=new Thread(h);
a.start();
b.start();
c.start();
d.start();
e.start();
}
}这么写也不对啊 能不能帮忙写一下 谢谢我从N小时前到现在正在研究多线程。。用Runnable接口呗,可以更好的实现
public class dddd implements Runnable
{
int i=100;
public synchronized void run()
{
while(i>=1)
{
synchronized (this){
System.out.println(Thread.currentThread().getName()+" "+i);
i--;
}
}
}
public static void main(String[] args) throws InterruptedException
{
dddd h=new dddd();
Thread a=new Thread(h,"a");
Thread b=new Thread(h,"b");
Thread c=new Thread(h,"c");
Thread d=new Thread(h,"d");
Thread e=new Thread(h,"e");
a.start();
b.start();
c.start();
d.start();
e.start();
}
}
我刚开始学多线程 不太熟悉
public class dddd extends Thread
{
static int i=100;
public synchronized void run()
{
while(i>=1)
{
System.out.println(Thread.currentThread().getName()+" "+i);
i--;
}
}
public static void main(String[] args) throws InterruptedException
{
int i=100;
dddd h=new dddd();
Thread a=new Thread(h);
Thread b=new Thread(h);
Thread c=new Thread(h);
Thread d=new Thread(h);
Thread e=new Thread(h);
a.start();
b.start();
c.start();
d.start();
e.start();
}
}这么写也不对啊 能不能帮忙写一下 谢谢另外因为这个过程相当之快,也就只能有一个线程抢到了CPU,然后就完成了,你可以改成查秒的,就能看出来几个线程的并行情况了另外你原来的竟然线程没有名字……
Thread-1 100
Thread-1 99
Thread-1 98
Thread-1 97
Thread-1 96
Thread-1 95
Thread-1 94
Thread-1 93
Thread-1 92
Thread-1 91
Thread-1 90
Thread-1 89
Thread-1 88
Thread-1 87
....
知道1
我的意思是类似于窗口售票的程序
就是一次运行一个线程
等卖出票后
在运行另一个线程(可能是自己 也可能是别的线程)
然后知道票卖完
就是这样
窗口1-----100
窗口3-----99
窗口2-----98
窗口1-----97
....
知道票售完 最后就可以停止所有线程
Thread-1 100
Thread-1 99
Thread-1 98
Thread-1 97
Thread-1 96
Thread-1 95
Thread-1 94
Thread-1 93
Thread-1 92
Thread-1 91
Thread-1 90
Thread-1 89
Thread-1 88
Thread-1 87
....
知道1
我的意思是类似于窗口售票的程序
就是一次运行一个线程
等卖出票后
在运行另一个线程(可能是自己 也可能是别的线程)
然后知道票卖完
就是这样
窗口1-----100
窗口3-----99
窗口2-----98
窗口1-----97
....
知道票售完 最后就可以停止所有线程public void run()如果有synchronized就会发生这种情况
Thread-1 100
Thread-1 99
Thread-1 98
Thread-1 97
Thread-1 96
Thread-1 95
Thread-1 94
Thread-1 93
Thread-1 92
Thread-1 91
Thread-1 90
Thread-1 89
Thread-1 88
Thread-1 87
....
知道1
我的意思是类似于窗口售票的程序
就是一次运行一个线程
等卖出票后
在运行另一个线程(可能是自己 也可能是别的线程)
然后知道票卖完
就是这样
窗口1-----100
窗口3-----99
窗口2-----98
窗口1-----97
....
知道票售完 最后就可以停止所有线程
问题解决了一大半,利用的是外层循环,内层一个判断
代码如下:
package test;class Window implements Runnable {
public void run() {
for(int k = 0;k<99;k++){
synchronized(this)
{
try{
Thread.sleep(100);
}catch(Exception e){}
if(i>=1)
System.out.println(Thread.currentThread().getName() + " "
+ i--);
}
}
} private int i = 100;
}public class Main {
public static void main(String[] args) {
Window h = new Window();
Thread a = new Thread(h, "a");
Thread b = new Thread(h, "b");
Thread c = new Thread(h, "c");
Thread d = new Thread(h, "d");
Thread e = new Thread(h, "e");
Thread f = new Thread(h, "f");
Thread g = new Thread(h, "g");
a.start();
b.start();
c.start();
d.start();
e.start();
f.start();
g.start();
}
}原理我也说不太懂,外层循环至少要保证和i的个数一样才比较科学……
不要在run()里面写synchronized(this),没什么用。
不要在run()里面写synchronized(this),没什么用。没用吗?仅就这个代码来说,如果没有synchronized(this),就会导致跳跃性的输出了啊,中间有值会缺失