码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2014-08-01 04:52:01      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   数据   art   ar   

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

 

多线程,布布扣,bubuko.com

多线程

标签:style   blog   color   使用   io   数据   art   ar   

原文地址:http://www.cnblogs.com/hefen/p/3883913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!