Java笔记16:多线程共享数据
一、Thread实现
- public class ThreadDemo4 {
- publicstaticvoid main(String[] args) {
- new ThreadTest4().start();
- new ThreadTest4().start();
- new ThreadTest4().start();
- }
- }
- class ThreadTest4 extends Thread {
- privateinttickets = 100;
- publicvoid run() {
- booleanloop = true;
- while(loop) {
- if(tickets > 0) {
- System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);
- } else {
- loop = false;
- }
- }
- }
- }
运行结果:
分析:
从运行结果可以看出,最终打印出了3份数据。说明每个线程独立地拥有一份数据,用Thread实现的多线程之间无法共享数据。
二、Runnable实现
- public class ThreadDemo5 {
- publicstaticvoid main(String[] args) {
- ThreadTest5 t = new ThreadTest5();
- new Thread(t).start();
- new Thread(t).start();
- new Thread(t).start();
- }
- }
- class ThreadTest5 implements Runnable {
- privateinttickets = 100;
- publicvoid run() {
- booleanloop = true;
- while(loop) {
- if(tickets > 0) {
- System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);
- } else {
- loop = false;
- }
- }
- }
- }
运行结果:
分析:
从运行结果可以看出,最终打印出来的只有一份数据。说明用Runnable实现的多个线程之间共享一份数据。
结论:
两种方法实现多线程的最重要区别是:Runnable实现的多线程共享数据,Thread实现的多线程,每个线程拥有独立的数据。所以在实际项目中,通常用Runnable方式来实现多线程。
学习时的痛苦是暂时的 未学到的痛苦是终生的