❶ java多线程的问题为何输出结果只有一个
1、主要是tt.join的问题。
2、当子线程开启后,主线程和子线程是并发或并行执行的,会多线程输出。
但是tt.join是指将tt线程与主线程(即tt.join这段代码所运行时候的线程)合并,即等tt.join运行完后执行刚刚的主线程。
而你的tt线程中的run()方法为:while(true)所以tt.join之后,tt一直在运行,
故只能看一个线程在运行。
希望能解决你的问题。
❷ Java多线程调试如何完成信息输出处理
默认情况下,在调试多线程程序时,当遇到断点时(breakpoint),当前线程暂停,而其它线程继续运行,有些情况下,这是我们不想要看到的。比如下面的例子:
再调试多线程程序:
可以看到所有线程都Suspend了。
❸ java多线程编程代码如下,输出结果如下:
首先,你同步的是具体的某个Test实例, 对于那个实例来说,实际上只有一个线程访问了那个代码块,但是sum和other却是多个线程同时去进行访问,实际上这是不安全的,如果你想实现每次都输出10000的效果,那么正确的应该是在Test.class上加锁,而不是获取Test实例的锁,修改后的代码如下:
publicclassTestextendsThread{
publicstaticintsum=10000;
publicstaticintother=0;
publicvoidgetMoney(){
synchronized(Test.class){
System.out.println(Thread.currentThread().getName()+"开始执行");
sum=sum-100;
System.out.println("sum-100");
other=other+100;
System.out.println("other+100");
System.out.println(sum+other);
System.out.println(Thread.currentThread().getName()+"执行完成");
}
}
publicvoidrun(){
getMoney();
}
publicstaticvoidmain(String[]agrs){
Threadt[]=newThread[10];
for(inti=0;i<=9;i++){
t[i]=newTest();
t[i].start();
}
}
}
// 上面代码能得到你的结果
❹ 用java多线程编程,输出"hello world"
4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
参考一下以下程序吧::
package com.lzy.interviewing;
public class ThreadTest1 {
private int j ;
public synchronized void inc() {
j++;
System.out.println(Thread.currentThread().getName() + "This +j is :"
+ j);
}
public synchronized void dec() {
j--;
System.out.println(Thread.currentThread().getName() + "This -j is :"
+ j);
}
class Inc implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
inc();
}
}
}
class Dec implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
dec();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadTest1 tTest = new ThreadTest1();
Inc inc = tTest.new Inc();
Dec dec = tTest.new Dec();
for (int i = 0; i < 2; i++) {
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
}
❺ java多线程输出打印问题2
多线程是程序设计中最困难的一个环节。
1、楼主对多线程的认识通过程序来看,还是刚开始学。
2、没有同步控制的多线程,就不能算是多线程。一般的多线程代码都要有同步控制,即不让多线程 跑乱。
3、因为你这个没有任何同步控制,跑成各种情况都有可能。我就不分析了。
建议找下马士兵的多线程视频部分,他在这块讲得比较详细和深入。
试下看吧。
❻ 使用java多线程打印0到1000输出且不重复,如何实现
这其实是一个多线程,资源共享的问题。实现Runnable接口就可以了。
截图是一个多线程资源共享的例子,每个线程可以互相知道ticket的值,这样就不会重复。
把ticket初始为0,每个线程打印出ticket的值,打完+1。下一个线程再打印ticket就是+1之后的值。然后再判断ticket的值,>=1000的时候停止线程。
详细的你可以看看:
java多线程总结 - Rollen Holt - 博客园
http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html
完全可以解决你的需求
❼ java中怎样多线程输出012012012其中thread-0输出0,thread-1输出1,thread-2输出2
class
Ctest
extends
Thread{
private
String
str;//用String是想着如果用其他字符串也可以,如果只是int容易出错
public
Ctest(String
str){
this.str=str;
}
public
void
run(){
for(int
i=0;
i<50;i++){
System.out.print(str);
}
}
}
public
class
Test
{
public
static
void
main(String
args[]){
Ctest
ct1
=
new
Ctest("0");
Ctest
ct2
=
new
Ctest("1");
Ctest
ct3
=
new
Ctest("2");
ct1.start();
ct2.start();
ct3.start();
}
}//在run方法中加sleep
就好
❽ JAVA多线程,怎么总是输出两个同样的
这应该是java中多线程的安全问题吧,CPU处理切换时间片的速率是非常快的,
当线程1判断完之后还没来得及输出,时间片就切换到线程2上了,
然后又进行了一次判断结果还是大于0,但是还没等到线程2输出就又回到了线程1,接着执行
输出语句,比如输出10,输出完之后又一次回到线程2上进行第二次输出,输出的结果和线程1
一样(10)。我觉得应该是临时阻塞问题。 希望能够采纳.
❾ java 多线程 ,输出
你t0线程执行到else,打印一次前门入场和后门入场,虽然你加了锁,但之后t1线程也还是会执行到else,所以又打印一次,没有问题吧。就像你的if(i>0&&i<=40)一样,两个线程都会执行到。
所以你在else里面也要加一个判断,让其中一个线程来输出就行了,或者你可以t0线程输出前门,t1线程输出后门。