Классический вопрос интервью: две темы, соответственно, печатайте AB, среди которых нить A Печать A, поток B Prints B, печатает по 10 раз каждый, так что эффект Абабабы ...
пакет com.shangshe.path; public Class Threadab { / ** * @param args * / public static void main (string [] args) {final print business = new print (); Новый поток (new Runnable () {public void run () {for (int i = 0; i <10; i ++) {business.print_a ();}}}}). start (); новый поток (new Runnable () {public void run () {for (int i = 0; i <10; i ++) {business.print_b ();}}}}). start (); }} класс Print {private Boolean flag = true; public Synchronized void print_a () {while (! flag) {try {this.wait (); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} System.out.print ("a"); flag = false; this.notify (); } public synchronized void print_b () {while (flag) {try {this.wait (); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} System.out.print ("b"); flag = true; this.notify (); }}Из приведенного выше примера мы можем разработать программу с 3 потоками или ровными потоками. Приведенный ниже пример - 3 потока, соответственно, A, B и C напечатаны 10 раз, так что эффект ABCABC.
public Class Threadabc { / ** * @param args * / public static void main (string [] args) {final print business = new print (); новый поток (new Runnable () {public void run () {for (int i = 0; i <100; i ++) {business.print_a ();}}}). start (); Новый поток (new Runnable () {public void run () {for (int i = 0; i <100; i ++) {business.print_b ();}}}). start (); Новый поток (new Runnable () {public void run () {for (int i = 0; i <100; i ++) {business.print_c ();}}}). start (); }} класс печати {private boolean sup_a = true; Частный логический sup_b = false; Частный логический должен wop_c = false; public Synchronized void print_a () {while (sup_b || sup_c) {try {this.wait (); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} System.out.print ("a"); должен_а = false; sup_b = true; sup_c = false; this.notifyall (); } public synchronized void print_b () {while (sope_a || sup_c) {try {this.wait (); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} System.out.print ("b"); должен_а = false; sup_b = false; sup_c = true; this.notifyall (); } public synchronized void print_c () {while (sope_a || sup_b) {try {this.wait (); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} System.out.print ("c"); sup_a = true; sup_b = false; sup_c = false; this.notifyall (); }}Еще раз, важность разработки программного обеспечения доказана; В многопоточных программах следует сказать, что в программах мы должны поместить код бизнес-логики в тот же класс, чтобы сделать его очень сплоченным и низким соединением