public class Test implements Runnable{ //Object o = new Object(); boolean flag = true; int num = 1; char let = 'A'; public static void main(String[] args) throws InterruptedException { Test t = new Test(true); new Thread(t).start(); Thread.sleep(10); t.setFlag(false); new Thread(t).start(); }
for example public class Test { static int count = 0; public static void main(String[] args) { Object locker = new Object(); new NumThread(locker).start(); new AlphaThread(locker).start(); } }class NumThread extends Thread { Object locker; int start = 1; public NumThread(Object locker) {this.locker = locker;} public void run() { while(true) { synchronized(locker) { if ((Test.count+1)%3 == 0) { try {locker.wait();} catch (Exception e) {e.printStackTrace();} } else { Test.count++; System.out.printf((start++) + ""); if (start > 52) {start = 1;} locker.notifyAll(); } } } } } class AlphaThread extends Thread { Object locker; char start = 'A'; public AlphaThread(Object locker) {this.locker = locker;} public void run() { while(true) { synchronized(locker) { if ((Test.count+1)%3 != 0) { try {locker.wait();} catch (Exception e) {e.printStackTrace();} } else { Test.count++; System.out.printf((char)(start++) + ""); if (start > 'Z') {start = 'A';} locker.notifyAll(); } } } } }
写了一个可以新的程序,可以指定: 顺序执行--------------------先new的先执行 每个任务每轮指定执行次数------new的时候第一个参数 一共运行多少轮---------------new 的时候第二个参数 public class Test implements Runnable{ private static int order = 0; private static int total = 0; private static Object lock = new Object(); //锁 private final int id; private int times; //运行频率 private int totalTimes; //运行总次数 private GoToRun go;
public static void main(String[] args) { synchronized (Test.lock){ new Thread(new Test(2, 26, new A())).start(); //第一个运行线程A的goToRun()方法,每轮运行2次,总共运行26次 new Thread(new Test(1, 26, new B())).start(); //第二个运行线程B的goToRun()方法,每轮运行1次,总共运行26次 //new Thread(new Test(1, 26, new C())).start(); //第三个运行线程C的goToRun()方法,每轮运行1次,总共运行26次 } } }interface GoToRun{ void goToRun(); } //要运行的方法所在的类继承GoToRun接口 class A implements GoToRun{ int i = 1; public void goToRun() { System.out.print(i++); } } class B implements GoToRun{ char ch = 'A'; public void goToRun(){ System.out.print(ch++); } } class C implements GoToRun{ char ch = 'a'; public void goToRun(){ System.out.print(ch++); } }
public class Test implements Runnable{
//Object o = new Object();
boolean flag = true;
int num = 1;
char let = 'A';
public static void main(String[] args) throws InterruptedException {
Test t = new Test(true);
new Thread(t).start();
Thread.sleep(10);
t.setFlag(false);
new Thread(t).start();
}
public Test(boolean flag){
this.flag = flag;
}
synchronized void printNumber(){
while(let <= 'Z'){
System.out.print(num++);
if(num % 2 == 1)
try {
this.notify();
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
synchronized void printLetter(){
while(let <= 'Z'){
System.out.print(let);
let++;
this.notify();
if(let <= 'Z')
{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void run() {
if(flag)
printNumber();
else
printLetter();
} public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
}
}
public class Test {
static int count = 0; public static void main(String[] args) {
Object locker = new Object();
new NumThread(locker).start();
new AlphaThread(locker).start();
}
}class NumThread extends Thread {
Object locker;
int start = 1;
public NumThread(Object locker) {this.locker = locker;}
public void run() {
while(true) {
synchronized(locker) {
if ((Test.count+1)%3 == 0) {
try {locker.wait();} catch (Exception e) {e.printStackTrace();}
} else {
Test.count++;
System.out.printf((start++) + "");
if (start > 52) {start = 1;}
locker.notifyAll();
}
}
}
}
} class AlphaThread extends Thread {
Object locker;
char start = 'A';
public AlphaThread(Object locker) {this.locker = locker;}
public void run() {
while(true) {
synchronized(locker) {
if ((Test.count+1)%3 != 0) {
try {locker.wait();} catch (Exception e) {e.printStackTrace();}
} else {
Test.count++;
System.out.printf((char)(start++) + "");
if (start > 'Z') {start = 'A';}
locker.notifyAll();
}
}
}
}
}
顺序执行--------------------先new的先执行
每个任务每轮指定执行次数------new的时候第一个参数
一共运行多少轮---------------new 的时候第二个参数
public class Test implements Runnable{
private static int order = 0;
private static int total = 0;
private static Object lock = new Object(); //锁
private final int id;
private int times; //运行频率
private int totalTimes; //运行总次数
private GoToRun go;
/*
* 构造函数
* 构造的时候会隐含指定了顺序,先构造的先执行
* 1.运行频率
* 2.运行总次数
*/
public Test(int times, int totalTimes, GoToRun go){
id = total++;
this.times = times;
this.totalTimes = totalTimes;
this.go = go;
}
public void run() {
synchronized (lock){
for(int i = 0; i < totalTimes; i++){
while(order != id){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j = 0; j < times; j++)
go.goToRun();
order = (order + 1) % total;
lock.notifyAll();
}
}
}
public static void main(String[] args) {
synchronized (Test.lock){
new Thread(new Test(2, 26, new A())).start(); //第一个运行线程A的goToRun()方法,每轮运行2次,总共运行26次
new Thread(new Test(1, 26, new B())).start(); //第二个运行线程B的goToRun()方法,每轮运行1次,总共运行26次
//new Thread(new Test(1, 26, new C())).start(); //第三个运行线程C的goToRun()方法,每轮运行1次,总共运行26次
}
}
}interface GoToRun{
void goToRun();
}
//要运行的方法所在的类继承GoToRun接口
class A implements GoToRun{
int i = 1;
public void goToRun() {
System.out.print(i++);
}
}
class B implements GoToRun{
char ch = 'A';
public void goToRun(){
System.out.print(ch++);
}
}
class C implements GoToRun{
char ch = 'a';
public void goToRun(){
System.out.print(ch++);
}
}
推荐一个强的 http://hi.baidu.com/dapplehou/blog/item/14e62834ebe1bc235ab5f504.html