java編寫兩個線程,要求一個輸出打印1-52,一個輸出打印a-z。打印順序要12a34b56c......51 52 z 瘋狂習(xí)題:寫2個線程,其中一個線程打印1-52,另一個線程打...
package semihum.threadTest;
public class Thread1 implements Runnable {
private Object _lock;
public Thread1(Object lock) {
_lock = lock;
}
@Override
public void run() {
try {
synchronized (_lock) {
for (int i = 0; i < 26; i++) {
//System.out.print((char) ('a' + i));
System.out.print((2 * i + 1) + "" + (2 * i + 2));
_lock.notify();
_lock.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package semihum.threadTest;
public class Thread2 implements Runnable {
private Object _lock;
public Thread2(Object lock) {
_lock = lock;
}
@Override
public void run() {
synchronized (_lock) {
for (int i = 0; i < 26; i++) {
try {
_lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
//System.out.print((2 * i + 1) + "" + (2 * i + 2));
System.out.print((char) ('a' + i));
_lock.notify();
}
}
}
}
package semihum.threadTest;
public class Main {
public static void main(String[] args){
Object lock=new Object();
Thread t1=new Thread(new Thread1(lock));
Thread t2=new Thread(new Thread2(lock));
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//現(xiàn)制,貌似寫成a12b34c56...了...您就看著隨便改改吧...JDK 1.6
好吧,我改過了,我只想說,LZ你要只是應(yīng)付作業(yè)什么的吧...
我編寫了兩個類文件,線程ThreadNum用來輸出數(shù)字,線程ThreadChar用來輸出字母,線程都在 testthread包下。
本來我用的方法是Thread.sleep(10),后來想這樣只是使當(dāng)前輸出線程停頓了10毫秒,不能很好的體現(xiàn)線程的搶占機制,而且還要處理拋出來的異常,于是我又換成Thread.yield();這樣就好多了,有人搶到,當(dāng)前線程就等著,沒人搶到,它就繼續(xù)執(zhí)行,于是就能出來兩個輸出是不確定的交叉輸出的效果。
下面是線程ThreadNum;
package testthread;
public class ThreadNum {
public static void main(String[] args){
ThreadChar threadChar = new ThreadChar();
threadChar.start();
for (int i = 1; i <= 52; i++) {
System.out.print(i + " ");
Thread.yield();
}
}
}
下面是線程ThreadChar;
package testthread;
public class ThreadChar extends Thread {
public void run() {
for (int i = 97; i <= 122; i++) {
char c = (char) i;
System.out.print(c + " ");
Thread.yield();
}
}
}
如果嫌上面的代碼復(fù)雜,簡單點就可以寫成內(nèi)部類,下面是代碼,存成ThreadNum 文件就可以了:
public class ThreadNum {
public static void main(String[] args){
ThreadChar threadChar = new ThreadChar();
threadChar.start();
for (int i = 1; i <= 52; i++) {
System.out.print(i + " ");
Thread.yield();
}
}
}
class ThreadChar extends Thread {
public void run() {
for (int i = 97; i <= 122; i++) {
char c = (char) i;
System.out.print(c + " ");
Thread.yield();
}
}
}
JAVA是什么意思?
Java的白皮書為我們提出了Java語言的11個關(guān)鍵特質(zhì)。 (1)Easy:Java的語法比C++的相對簡單,另一個方面就是Java能使軟件在很小的機器上運行,基礎(chǔ)解釋其和類庫的支持的大小約為40kb,增加基本的標(biāo)準庫和線程支持的內(nèi)存需要增加125kb。 (2)分布式:Java帶有很強大的TCP\/IP協(xié)議族的例程庫,Java應(yīng)用程序能夠通過URL來穿過...
java是什么語言?
Java要求顯式的方法聲明,它不支持C風(fēng)格的隱式聲明。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。Java的特點:Java具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵脚_獨立與可移植性、多線程、動態(tài)性等特點;下面我們來具體介紹一下:1、簡單性Java看起來設(shè)計得很像C++,...
學(xué)習(xí)JAVA最重要的是什么?
Javase Java基礎(chǔ)所包含的,Java零基礎(chǔ)必備安裝包、JavaSE301集、Java教程零基礎(chǔ)2019、Java教程零基礎(chǔ)2019(ava基礎(chǔ)語法、面向?qū)ο蟆惓!?shù)組、常用類、集合、IO流、線程、反射機等等)、XML、Tomcat服務(wù)器開發(fā);其中Java零基礎(chǔ)2019這視頻教程系列可以去B站觀看。搜索Java或者Java教程,第一個就是,杜老師...
C++是什么?
1.簡單 Java最初是為對家用電器進行集成控制而設(shè)計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面: 1) Java的風(fēng)格類似于C++,因而C++程序員是非常熟悉的。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程序員可以很快就掌握Java編程技術(shù)。 2) Java摒棄了C++中容易引發(fā)程序...
請問JDK1.8 和JDK 8有什么不同?
DK1.8和JDK8沒有區(qū)別。ava大體有3大類命名方式,JDK、J2SE、JAVASE,Java8、JDK8、JDK1.8都是一個東西,JDK。其名稱變更過程如下:1998年12月8日,Sun公司發(fā)布了第二代Java平臺的3個版本。J2ME,,Java2平臺的微型版,應(yīng)用于移動、無線及有限資源的環(huán)境;Java2StandardEdition,Java2平臺的標(biāo)準...
String,StringBuffer和StringBuilder的區(qū)別
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是線程安全的。看如下源碼:1 public synchronized StringBuffer reverse() {2 super.reverse()...
零基礎(chǔ)如何學(xué)習(xí)Java?
三.作為一個Java初學(xué)者,正確的Java學(xué)習(xí)方式。1、首先要有吃苦耐勞的精神,因為學(xué)習(xí)編程不是看小說,完就大概明白是什么意思,就可以給別人講故事了,你得敲大量的代碼,從實踐中才能對Java有一個真正的認識 ,才能讓自己在開發(fā)中得心應(yīng)手。舉例高博威。2、學(xué)習(xí)知識要持之以恒,不要三天打魚兩天曬網(wǎng)的,...
Java沒有虛擬機什么都干不了,為什么還有人用呢?
但是微軟一直是一個壟斷公司他的目標(biāo)都是銷售他的操作系統(tǒng),這是他的最終目標(biāo),所以他不會考慮跨平臺的問題,所以java在很大程度上有優(yōu)勢也有益于我們的系統(tǒng),但是要知道服務(wù)器系統(tǒng)最終都是走向unix所以都需要花錢的 哈哈. 不過說了這么多我也沒說明白java的好處,但是要知道java在j2ee上很有前途.畢竟發(fā)展了...
java不僅是一種語言,它更是一個平臺它還提供了什么什么什么等一系列支...
1、Java不僅是一種語言,它更是一個平臺。它還提供了開發(fā)類庫、運行環(huán)境、部署環(huán)境等一系列支持。2、Java吸收了C++的優(yōu)點,具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵脚_獨立與可移植性、多線程、動態(tài)性等特點 。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等 。
Java語言的特點有哪些
Java最初是為對家用電器進行集成控制而設(shè)計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面: 1) Java的風(fēng)格類似于C++,因而C++程序員是非常熟悉的。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程序員可以很快就掌握Java編程技術(shù)。 2) Java摒棄了C++中容易引發(fā)程序錯誤的地方...
相關(guān)評說:
安西縣偏置: ______ public class ThreadTest extends Thread { public static void main(String[] args) { Thread1 tf = new Thread1(); tf.start(); Thread2 ts = new Thread2(); ts.start(); } } class Thread1 extends Thread { public void run() { System.out.println("2 到 100000之間...
安西縣偏置: ______ 一般情況來說,不會,因為分屬兩個不同線程,各自處理自己邏輯,互不影響 但是特殊情況下,假設(shè)A B兩線程一起跑,如果A失敗了,并且拋出異常,甚至造成內(nèi)存溢出等重大事故,搞得Tomcat等服務(wù)器沒法運行了,那自然B線程也就掛了
安西縣偏置: ______ 要分清方法和變量之間的關(guān)系 方法是變量的處理流程,變量才是一個實例的主體部分,方法是所有實例#共用#的一個流程而已 無論哪個線程還是哪個實例都是共用同一個方法,所以都是可以同時執(zhí)行這個方法的. 只是加上鎖之后,被同一個鎖鎖住的實例調(diào)用的時候會把其他線程的調(diào)用暫停而已. 沒加鎖的則是同時運行方法,若是同一個實例里的話... 就會同時對該變量進行修改造成線程錯誤... 所以一定是同一個方法... 只是有加鎖沒加鎖是其他線程是否需要暫停等待的差別
安西縣偏置: ______ 如果是全局變量,而各個線程又都要能讀寫,而且不能被別的線程覆蓋掉,那只能是加鎖,lock(全局變量){ doSomeThing();}但是這樣會影響多線程的并發(fā),如果是私有變量就不存在這個問題了,得看你具體要求做什么了
安西縣偏置: ______ 我不太明白你的意思 我說說我的理解 線程就是使程序并發(fā)的 也就是說程序同時運行 你現(xiàn)在要 線程2執(zhí)行到特定時候開始執(zhí)行線程1.那不需要并發(fā) 直接寫一個順序運行就可以了嘛 這是我自己的理解 歡迎交流
安西縣偏置: ______ java5以前,有如下兩種:有兩種實現(xiàn)方法,分別使用new Thread()和new Thread(runnable)形式,第一種直接調(diào)用thread的run方法,所以,我們往往使用Thread子類,即new SubThread().第二種調(diào)用runnable的run方法.第一種:new Thread...
安西縣偏置: ______ public class Test { int i=0;//在線程中對這個變量進行加減操作,并輸出操作后的值 public static void main(String[] args) { Test test = new Test(); new AddTest(test).start(); new DecTest(test).start(); } } class AddTest extends Thread { private Test...
安西縣偏置: ______ 在run方法里.做一個if判斷.當(dāng)i加一后這個線程調(diào)用 join方法.就行了.
安西縣偏置: ______ 代碼位置放錯了吧...public void run(){ sum2=0; for(int j=begin2;j sum2+=j; // data.setSum(sum2); //這里的代碼去掉 } data.setSum(sum2); //放到這里來 }
安西縣偏置: ______ 這個要用到同步的wait和notify的機制.思考的方式就是:A有一個數(shù)據(jù)緩存,它不停的把數(shù)據(jù)寫入到這個緩存中,等這個緩存滿了,就把數(shù)據(jù)全部拷貝到一個共享數(shù)據(jù)中.而B就是不停的從這個共享數(shù)據(jù)中獲取數(shù)據(jù).這樣就可以協(xié)同工作了.代...