public class A{
public void run(){
try{
sleep(1500);
}catch(InterruptedException ex){}
}
}
public class B{
private A a;
public B(A a){this.a = a;}
pubic void run(){
try{
a.join();
}catch(InterruptedException ex){}
}
}
public static void main(String[] args){
A a = new A();
B b = new B(a);
a.start();
b.start();
a.interrupt();//b在start之后就一直等待,直到执行到a.interrupt()或者a已经执行完毕(
a休眠时间到
}
生产者与消费者
package com.icarusliu.learn.others;
/**
* 账户
* @author liuqi
*
*/
public class Account {
private int account;
public Account(){
this.account = 0;
}
public int getAccount(){
return this.account;
}
public synchronized void deposite(int count){
this.account += count;
System.out.println("Deposite " + count);
notifyAll();//每存一次就唤醒挂起在这个对象上面的线程
}
public synchronized void withdraw(int count){
try{
while(account<count){//如果不够,则进入等待,当有存储进行时,就会唤醒然后继续判断 是否足够
System.out.println("It's too less!");
wait();
}
}catch(Exception ex){
ex.printStackTrace();
}
account -= count;
System.out.println("Withdraw " + count);
}
}
package com.icarusliu.learn.others;
/**
* 消费者
* @author liuqi
*
*/
public class Consumer extends Thread{
Account account;
public Consumer(Account account ){
this.account = account;
}
public void run(){
account.withdraw(100);
}
}
package com.icarusliu.learn.others;
/**
* 生产者
* @author liuqi
*
*/
public class Producer extends Thread{
Account account;
public Producer(Account account ){
this.account = account;
}
public void run(){
int count = 0;
while(count++<12){
account.deposite(10);
try{
sleep(10);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
package com.icarusliu.learn.others;
public class ThreadTest {
Account count = new Account();
Consumer cThread = new Consumer(count);
Producer pThread = new Producer(count);
public static void main(String args[]){
ThreadTest t = new ThreadTest();
t.cThread.start();
t.pThread.start();
}
}
//例子2,两个线程,一个给j加1,一个减1
package com.icarusliu.learn.thread;
public class ThreadTest {
private int j;
public ThreadTest(int j){
this.j= j;
}
public synchronized void inc(){
j++;
j++;
System.out.println("Add");
}
public synchronized void dec(){
j--;
System.out.println("Delete");
}
public class Inc extends Thread{
public void run(){
inc();
}
}
public class Dec extends Thread{
public void run(){
dec();
}
}
public static void main(String args[]){
ThreadTest t = new ThreadTest(0);
int i = 0;
ThreadGroup g = new ThreadGroup("g");
for(i=0;i<100;i++){
Thread incThread = new Thread(g,t.new Inc(),"inc");
Thread decThread = new Thread(g,t.new Dec(),"dec");
incThread.start();
decThread.start();
}
while(g.activeCount()!=0);
System.out.println(t.j);
}
}