首页 > 代码库 > 多线程

多线程

线程的两种实现方式: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); }}