使用thread
使用javaJDK5以上自带
package Thread.deng;
public class duida {
public static void main(String[] args) {
new duida().ini();
}
public void ini(){
final pingtai p = new pingtai();
new Thread(new Runnable(){
public void run(){
for(int i=0;i<10;i++){
p.ldz();
}
}
}){}.start();
for(int i=0;i<10;i++){
p.zdl();
}
}
private class pingtai{
boolean is = true;
public synchronized void zdl(){
if(is){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int i=0;i<2;i++){
System.out.println("张三攻击了李四,连击"+i);
}
is = true;
this.notify();
}
public synchronized void ldz(){
if(!is){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int i=0;i<2;i++){
System.out.println("李四攻击了张三,连击"+i);
}
is = false;
this.notify();
}
}
}
使用javaJDK5以上自带
package Thread.deng;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Jdk5Thread {
private static Lock lock = new ReentrantLock();
private static Condition subThreadCondition = lock.newCondition();
private static boolean bBhouldSubThread = false;
public static void main(String[] args) {
ExecutorService threadPool = Executors.newFixedThreadPool(3);
threadPool.execute(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
lock.lock();
try{
if(!bBhouldSubThread){
subThreadCondition.await();
for(int j=0;j<2;j++){
System.out.println("sdsdfsdfsdf");
}
bBhouldSubThread = false;
subThreadCondition.signal();
}
}catch(Exception e){
}finally{
lock.unlock();
}
}
}
});
threadPool.shutdown();
for(int i=0;i<10;i++){
lock.lock();
try{
if(bBhouldSubThread)
subThreadCondition.await();
for(int j=0;j<1;j++){
System.out.println("aaaaa");
}
bBhouldSubThread = true;
subThreadCondition.signal();
}catch(Exception e){
}finally{
lock.unlock();
}
}
}
}