public class Test implements Runnable {int lens = 0; public Test(int len) { this.lens = len; } public void run() {while(lens>0) { System.out.println(Thread.currentThread().getName()+ lens-- +"已定出!"); try{Thread.sleep(100);}catch(Exception e){} }
System.out.println("票已售完!");
}public static void main(String args[]) { Test test = new Test(100); Thread t1 = new Thread(test,"1号售票处:"); Thread t2 = new Thread(test,"2号售票处:"); Thread t3 = new Thread(test,"3号售票处:"); t1.start(); t2.start(); t3.start(); } } 参考下 三个窗口同时售100张票的情况
定义一个synchronized函数来操作你要同步的代码 比如说:public synchronized int add(){}
这个问题其实就是多个线程执行一个方法。 你可以写一个计数的方法,在方法体里面对一个全局变量进行+操作。 为了避免出现2个或多个线程同时操作同一个数,导致计算错误,你可以把这个方法写成同步方法,或者加上同步快。比如这样:class Count implements Runnable { private int i = 0 ;
public synchronized void counter() { i = ++i ; System.out.println(i); } public void run() { counter(); }
public static void main(String[] args) { Count c = new Count(); Thread t1 = new Thread(c); t1.start(); Thread t2 = new Thread(c); t2.start(); Thread t3 = new Thread(c); t3.start(); Thread t4 = new Thread(c); t4.start(); } }
{int lens = 0;
public Test(int len)
{
this.lens = len;
}
public void run()
{while(lens>0)
{
System.out.println(Thread.currentThread().getName()+ lens-- +"已定出!");
try{Thread.sleep(100);}catch(Exception e){}
}
System.out.println("票已售完!");
}public static void main(String args[])
{
Test test = new Test(100);
Thread t1 = new Thread(test,"1号售票处:");
Thread t2 = new Thread(test,"2号售票处:");
Thread t3 = new Thread(test,"3号售票处:");
t1.start();
t2.start();
t3.start();
}
}
参考下 三个窗口同时售100张票的情况
比如说:public synchronized int add(){}
比如设置一个标志为,线程开始调用设置为true ,关闭线程的时候设置为false任何想写这个方法的时候都要判断一下这个标志位
同意楼上的
不同的进程甚至都不在一个jvm里运行,synchronized,voliate都没有意义可以考虑通过socket端口来实现
你可以写一个计数的方法,在方法体里面对一个全局变量进行+操作。
为了避免出现2个或多个线程同时操作同一个数,导致计算错误,你可以把这个方法写成同步方法,或者加上同步快。比如这样:class Count implements Runnable
{
private int i = 0 ;
public synchronized void counter()
{
i = ++i ;
System.out.println(i);
} public void run()
{
counter();
}
public static void main(String[] args)
{
Count c = new Count();
Thread t1 = new Thread(c);
t1.start();
Thread t2 = new Thread(c);
t2.start();
Thread t3 = new Thread(c);
t3.start();
Thread t4 = new Thread(c);
t4.start();
}
}