您的位置:首页 > 编程语言 > Java开发

Java 线程控制(输出奇偶数)

2014-07-21 17:39 197 查看
两个线程,一个输出1,3,5,7......99;另一个输出2,4,6,8......100。

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();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: