Java 线程控制(输出奇偶数)
2014-07-21 17:39
197 查看
两个线程,一个输出1,3,5,7......99;另一个输出2,4,6,8......100。
1.线程同步
输出:
从这里可以看出,线程随机执行。
2.控制线程执行顺序
输出:
3.控制线程执行次数
1.线程同步
public class ST2 { int i = 0; public static void main(String[] args) { ST2 st1 = new ST2(); new Thread(st1.new Inc()).start(); new Thread(st1.new Dec()).start(); } private synchronized void inc(){ i++; try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" +++ "+i); } private synchronized void dec(){ i--; try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" ----- "+i); } class Inc implements Runnable{ @Override public void run() { while(true) inc(); } } class Dec implements Runnable{ @Override public void run() { while(true) dec(); } } }
输出:
Thread-1 ----- -1 Thread-1 ----- -2 Thread-0 +++ -1 Thread-0 +++ 0 Thread-0 +++ 1 Thread-0 +++ 2 Thread-1 ----- 1 Thread-0 +++ 2 Thread-1 ----- 1 Thread-1 ----- 0 Thread-1 ----- -1 Thread-1 ----- -2 Thread-0 +++ -1 Thread-0 +++ 0 Thread-0 +++ 1 Thread-1 ----- 0 Thread-1 ----- -1 Thread-1 ----- -2 Thread-1 ----- -3 Thread-1 ----- -4 Thread-0 +++ -3 Thread-0 +++ -2 Thread-0 +++ -1 Thread-0 +++ 0
从这里可以看出,线程随机执行。
2.控制线程执行顺序
private synchronized void inc() throws Exception{ b = true; notifyAll(); i++; System.out.println(Thread.currentThread().getName()+" ++ "+i); Thread.currentThread().sleep(1000); while(b) wait(); } private synchronized void dec() throws Exception { while(!b) wait(); i++; System.out.println(Thread.currentThread().getName()+" ++++ "+i); Thread.currentThread().sleep(1000); b = false; notifyAll(); }
输出:
Thread-0 ++ 1 Thread-1 ++++ 2 Thread-0 ++ 3 Thread-1 ++++ 4 Thread-0 ++ 5 Thread-1 ++++ 6 Thread-0 ++ 7 Thread-1 ++++ 8 Thread-0 ++ 9 Thread-1 ++++ 10 Thread-0 ++ 11 Thread-1 ++++ 12 Thread-0 ++ 13 Thread-1 ++++ 14 Thread-0 ++ 15 Thread-1 ++++ 16 Thread-0 ++ 17 Thread-1 ++++ 18 Thread-0 ++ 19 Thread-1 ++++ 20 Thread-0 ++ 21
3.控制线程执行次数
class Inc implements Runnable{ @Override public void run() { for(int j=0 ; j<50; j++){ try { inc(); } catch (Exception e) { e.printStackTrace(); } } } } class Dec implements Runnable{ @Override public void run() { for(int j=0 ; j<50; j++){ try { dec(); } catch (Exception e) { e.printStackTrace(); } } } }
相关文章推荐
- Java多线程:用三个线程控制循环输出10次ABC
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- java两个线程轮流输出奇数和偶数到100
- 控制线程顺序循环输出ABC (java Condition 代码简洁版)
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程(二)、线程的生命周期和状态控制
- 【java多线程与并发库】---传统java多线程<5> 线程控制
- java 一个线程控制另一个线程
- java 一个线程控制另一个线程
- java基础--线程--线程的基本控制和交互--02
- java学习笔记1018---线程的控制
- 在Java中,控制一个double数以两位小数形式输出!
- 在Java中,控制一个double数以两位小数形式输出!
- Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
- 在Java中,如何控制一个double数以两位小数形式输出