首页 > 代码库 > 多线程
多线程
线程的两种实现方式:1.extend Thread 2.implement Runnable
多线程共享数据:
如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据:
1.将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Runnable对象。每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样容易实现针对该数据进行的各个操作的互斥和通信。
2.将这些Runnable对象作为某一个类中的内部类,共享数据作为这个外部类中的成员变量,每个线程对共享数据的操作方法也分配给外部类,以便实现对外共享数据进行的各个操作的互斥和通信,作为内部类的各个Runnable对象调用外部类的这些方法。
public class MultiThreadShareData { public static void main(String[] args) { //买票 ShareTicket shareTicket = new ShareTicket(); new Thread(shareTicket).start(); new Thread(shareTicket).start(); new Thread(shareTicket).start(); }}class ShareTicket implements Runnable { private int count = 100; @Override public void run() { while (true) { synchronized (this) { if(count > 0){ try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.current().getName()+"count="+count); count--; } } } } private int j=0; public synchronized void increment(){ j++; System.out.println("+j="+j); } public synchronized void decrement(){ j--; System.out.println("-j="+j); }}
public class MultiThreadShareData { private static ShareTicket shareTicket =new ShareTicket(); public static void main(String[] args) {
new Thread (new MyRunnable1(shareTicket)).start();
new Thread (new MyRunnable2(shareTicket)).start();
//2如果有一个加有一个减new两个Runnable new Thread(new Runnable() { @Override public void run() { //这里减数据 while(true){ shareTicket.decrement(); } } }).start(); new Thread(new Runnable() { @Override public void run() { //这里加数据 while(true){ shareTicket.increment(); } } }).start(); }}class MyRunnable1 implements Runnable{ private ShareTicket shareTicket; public MyRunnable1(ShareTicket shareTicket){ this.shareTicket =shareTicket; } @Override public void run() { }}//有两个runnable,执行不同的操作
class MyRunnable2 implements Runnable{ private ShareTicket shareTicket; public MyRunnable2(ShareTicket shareTicket){ this.shareTicket =shareTicket; } @Override public void run() { }}class ShareTicket implements Runnable { private int count = 100; @Override public void run() { } } } } private int j=0; public synchronized void increment(){ j++; System.out.println("+j="+j); } public synchronized void decrement(){ j--; System.out.println("-j="+j); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。