Java多线程-Java多线程实现
1,继承Thread类
2,实现Runnable接口
3,多线程实现数据共享
1,继承Thread类
package com.java1234.chap09.sec02; public class Thread1 extends Thread{ private int baoZi=1; private String threadName; public Thread1(String threadName) { super(); this.threadName = threadName; } @Override public void run() { while(baoZi<=10){ System.out.println(threadName+" 吃"+baoZi+"第个包子"); baoZi++; } } public static void main(String[] args) { // 张三 李四一起吃包子 每人吃10个 Thread1 t1=new Thread1("张三线程"); Thread1 t2=new Thread1("李四线程"); t1.start(); t2.start(); } }
运行输出:
张三线程 吃1第个包子
张三线程 吃2第个包子
张三线程 吃3第个包子
张三线程 吃4第个包子
张三线程 吃5第个包子
张三线程 吃6第个包子
张三线程 吃7第个包子
张三线程 吃8第个包子
张三线程 吃9第个包子
张三线程 吃10第个包子
李四线程 吃1第个包子
李四线程 吃2第个包子
李四线程 吃3第个包子
李四线程 吃4第个包子
李四线程 吃5第个包子
李四线程 吃6第个包子
李四线程 吃7第个包子
李四线程 吃8第个包子
李四线程 吃9第个包子
李四线程 吃10第个包子
2,实现Runnable接口
package com.java1234.chap09.sec02; public class Thread2 implements Runnable{ private int baoZi=1; private String threadName; public Thread2(String threadName) { super(); this.threadName = threadName; } @Override public void run() { while(baoZi<=10){ System.out.println(threadName+" 吃"+baoZi+"第个包子"); baoZi++; } } public static void main(String[] args) { // 张三 李四一起吃包子 每人吃10个 Thread2 t1=new Thread2("张三线程"); Thread2 t2=new Thread2("李四线程"); Thread t11=new Thread(t1); Thread t12=new Thread(t2); t11.start(); t12.start(); } }
运行输出:
张三线程 吃1第个包子
张三线程 吃2第个包子
李四线程 吃1第个包子
张三线程 吃3第个包子
李四线程 吃2第个包子
李四线程 吃3第个包子
李四线程 吃4第个包子
李四线程 吃5第个包子
李四线程 吃6第个包子
李四线程 吃7第个包子
李四线程 吃8第个包子
张三线程 吃4第个包子
李四线程 吃9第个包子
李四线程 吃10第个包子
张三线程 吃5第个包子
张三线程 吃6第个包子
张三线程 吃7第个包子
张三线程 吃8第个包子
张三线程 吃9第个包子
张三线程 吃10第个包子
3,多线程实现数据共享
package com.java1234.chap09.sec02; public class Thread3 implements Runnable{ private int baoZi=1; private String threadName; public Thread3(String threadName) { super(); this.threadName = threadName; } @Override public synchronized void run() { while(baoZi<=10){ System.out.println(threadName+" 吃"+baoZi+"第个包子"); baoZi++; } } public static void main(String[] args) { Thread3 t1=new Thread3("超级张三线程"); Thread t11=new Thread(t1); Thread t12=new Thread(t1); Thread t13=new Thread(t1); t11.start(); t12.start(); t13.start(); } }
运行输出:
超级张三线程 吃1第个包子
超级张三线程 吃2第个包子
超级张三线程 吃3第个包子
超级张三线程 吃4第个包子
超级张三线程 吃5第个包子
超级张三线程 吃6第个包子
超级张三线程 吃7第个包子
超级张三线程 吃8第个包子
超级张三线程 吃9第个包子
超级张三线程 吃10第个包子
这里我们定义一个实例 然后用这个实例来是实例化三个Thread对象,run方法我们要加synchronized锁,否则会出现多个线程同时进入方法的情况,导致多个线程吃同一个包子;
上一篇:Java多线程-多线程的引入
下一篇:Java多线程-线程的状态