目录
1. 介绍
同一进程的多个线程间可以共享相同的内存单元,并可利用这些共享单元来实现数据交换、实时通信和必要的同步操作
2. 通过继承Thread类的线程对象
通过操作静态变量实现数据共享
实例代码
package Pratice;
public class Ticket1 {
public static void main(String[] args) {
window w1=new window("窗口1");
window w2=new window("窗口2");
window w3=new window("窗口3");
w1.start();
w2.start();
w3.start();
}
}
class window extends Thread{
private static int tickets=30; //将tickets设置为静态变量来实现线程间数据共享(同步),票数趋近如正常但会有同票(未实现互斥)
public window(String t){
this.setName(t);
}
public void run(){
while(tickets>0){
System.out.println(getName()+"售出了"+tickets+"号票");
tickets--;
}
}
}
3. 利用Runnable接口创建的线程对象
对于利用构造方法Thread(Runnable target)这种方式创建的线程,当轮到它来使用CPU资源时,可运行对象target就会自动调用接口中的run()方法,对于同一可运行对象的多个线程,可运行对象的成员变量自然就是这些线程共享的数据单元(Runnable接口更适用于线程间的数据共享)
实例代码
package Pratice;
public class Ticket2 {
public static void main(String[] args) {
window2 wind=new window2();
Thread t1=new Thread(wind,"窗口1");
Thread t2=new Thread(wind,"窗口2");
Thread t3=new Thread(wind,"窗口3");
//利用同一继承Runnable接口类的对象构建多个线程,实现线程间的数据共享,但依旧未实现互斥(存在重票)
t1.start();
t2.start();
t3.start();
}
}
class window2 implements Runnable {
private int tickets = 30;
@Override
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName()+"售出了" + tickets + "号票");
tickets--;
}
}
}