线程间的数据共享

原创 2016年05月30日 18:51:07

线程间的数据共享可以通过两种方式

通过Thread子类创建进程的方法

通过Runnable接口实现进程之间的共享



比较这两种实现进程共享的区别


Thread子类创建进程:

package practice4;

public class ThreadSale extends Thread{
	private int tickets=10;

	public void run(){
		while(true){
			if(tickets>0)
				System.out.println(getName()+" 售机票第"+tickets--+"号");
			else
				System.exit(0);
		}
	}
}

public class App11_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadSale t1=new ThreadSale();
		ThreadSale t2=new ThreadSale();
		ThreadSale t3=new ThreadSale();
		t1.start();
		t2.start();
		t3.start();
	}

}

运行结果:

Thread-0 售机票第10号
Thread-2 售机票第10号
Thread-1 售机票第10号
Thread-2 售机票第9号
Thread-0 售机票第9号
Thread-2 售机票第8号
Thread-1 售机票第9号
Thread-2 售机票第7号
Thread-2 售机票第6号
Thread-2 售机票第5号
Thread-0 售机票第8号
Thread-2 售机票第4号
Thread-2 售机票第3号
Thread-2 售机票第2号
Thread-2 售机票第1号
Thread-1 售机票第8号
Thread-1 售机票第7号
Thread-1 售机票第6号
Thread-1 售机票第5号
Thread-1 售机票第4号
Thread-1 售机票第3号
Thread-1 售机票第2号
Thread-1 售机票第1号
Thread-0 售机票第7号
Thread-0 售机票第6号
Thread-0 售机票第5号
Thread-0 售机票第4号
Thread-0 售机票第3号
Thread-0 售机票第2号


Runnable接口创建进程:


package practice4;

public class ThreadSale1 implements Runnable{
	private int tickets=10;
	
	public void run(){
		while(true){
			if(tickets>0)
				System.out.println(Thread.currentThread().getName()+"  售机票第"+tickets--+"号");
			else
				System.exit(0);
		}
	}
}


public class App11_5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadSale1 t=new ThreadSale1();
		Thread t1=new Thread(t,"第一售票窗口");
		Thread t2=new Thread(t,"第二售票窗口");
		Thread t3=new Thread(t,"第三售票窗口");
		t1.start();
		t2.start();
		t3.start();
	}

}


运行结果:

第二售票窗口  售机票第9号
第三售票窗口  售机票第8号
第一售票窗口  售机票第10号
第三售票窗口  售机票第6号
第二售票窗口  售机票第7号
第三售票窗口  售机票第4号
第一售票窗口  售机票第5号
第三售票窗口  售机票第2号
第二售票窗口  售机票第3号
第一售票窗口  售机票第1号

可以看出Runnable接口比Thread子类更加实用


多线程间的数据共享的几种实现方式比较

需求:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j减少1. 实现数据共享的几种方式比较: 1.使用同一个runnable对象 如果每个线程执行的代码相同,那么可以使用同...
  • lwj0310
  • lwj0310
  • 2014年04月25日 11:28
  • 3365

java 线程间数据共享和android 线程间数据共享异同

(一)Java多线程编程访问共享对象和数据的方法 1、每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享。 2、每个线程执行的代码不同,例如:设计四个线程...
  • tianyeming
  • tianyeming
  • 2015年11月30日 15:23
  • 1101

JAVA 并发编程-多个线程之间共享数据(六)

多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候...
  • hejingyuan6
  • hejingyuan6
  • 2015年07月25日 10:09
  • 15275

进程间的数据共享

//========================================================================//TITLE://    进程间的数据共享//AU...
  • norains
  • norains
  • 2008年07月16日 23:19
  • 10738

线程间数据共享

当多个线程的执行代码来自同一个类的run方法,既称他们共享相同的代码;当共享访问相同的对象时,既他们共享相同的数据。   演示代码 import java.lang.*; public c...
  • lygapp
  • lygapp
  • 2014年09月18日 15:21
  • 370

android不同线程之间数据交互

跨线程(不是跨进程,一个程序间主要是跨线程,不同程序间跨进程,当然也跨线程)的数据交互,我感觉这个问题是android开发中关键的核心。常见方法有一下几种: 1、利用一个公共的静态类来存储方法。这个公...
  • d_o_n_g2
  • d_o_n_g2
  • 2016年04月05日 11:05
  • 1328

Qt线程间共享数据

Qt线程间共享数据1. 数据共享注意点像 QString 等这些 Qt 本身定义的类型,直接传送即可。但如果自定义的类型想使用 signal/slot 来传递的话,则不能直接使用。 typedef ...
  • wu_wentao
  • wu_wentao
  • 2017年11月29日 14:34
  • 96

多线程之不共享数据和共享数据

西城旧梦梦旧人 2017-03-28 18:00 我们在设计线程的时候,有时候希望他共享数据,有时候又希望不,那么这两种情况究竟怎么做呢? 不共享数据 不共享数据就是每个都是...
  • u011277123
  • u011277123
  • 2017年03月30日 09:14
  • 781

《C++并发编程实战》读书笔记2---在线程间共享数据

整本书的2-4章,就是介绍C++11的标准库关于多线程的基本使用。 第2章介绍thread,用于创建多线程。 第3章介绍mutex,用于共享数据。 第4章介绍condition_variable和fu...
  • u010087886
  • u010087886
  • 2015年10月20日 14:19
  • 536

【java并发】多个线程间共享数据

先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1。   从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个data,共...
  • eson_15
  • eson_15
  • 2016年05月31日 22:56
  • 12724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程间的数据共享
举报原因:
原因补充:

(最多只允许输入30个字)