1.題目:主線程執行10次,子線程執行10次,此過程重復50次
代碼:
package com.Thread.test;/* * function:主線程執行10次,子線程執行10次, * 此過程重復50次 */public class ThreadProblem { public ThreadProblem() { final Business bus = new Business(); new Thread(new Runnable() { public void run() { for(int j=0;j<50;j++) { bus.sub(j); } } }).start(); for(int j=0;j<50;j++) { bus.main(j); } } class Business { private boolean tag=true; public synchronized void sub(int num) { if(!tag) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for(int i=0;i<10;i++) { System.out.println("sub thread "+i+",loop "+num+"."); } tag=false; notify(); } public synchronized void main(int num) { if(tag) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for(int i=0;i<10;i++) { System.out.println("main thread "+i+",loop "+num+"."); } tag=true; notify(); } } public static void main(String[] args) { ThreadProblem problem = new ThreadProblem(); }}
2.四個線程,共享一個變量j,其中兩個線程對j加1,兩個線程對j減1。
代碼如下:
package com.Thread.test;//實現4個線程,兩個線程加1,兩個線程減1public class Demo1 { private static int j=0; private A a = new A(); //構造函數 public Demo1() { System.out.println("j的初始值為:"+j); for(int i=0;i<2;i++) { new Thread(new Runnable(){ public void run() { for(int k=0;k<5;k++){ a.add1(); } } }).start(); new Thread(new Runnable(){ public void run() { for(int k=0;k<5;k++) { a.delete1(); } } }).start(); } } class A { public synchronized void add1() { j++; System.out.println(Thread.currentThread().getName()+"對j加1,目前j="+Demo1.j); } public synchronized void delete1() { j--; System.out.println(Thread.currentThread().getName()+"對j減1,目前j="+Demo1.j); } } //用于測試的主函數 public static void main(String[] args) { Demo1 demo = new Demo1(); }}
新聞熱點
疑難解答