❶ 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線程輸出後門。