多线程共享资源案例

来源:互联网 发布:淘宝上架宝贝数量 编辑:程序博客网 时间:2024/05/20 06:42

最近研究了一下多线程,主要针对于多线程共享同一资源,和多线程执行各自的资源
其实主要要就是搞清楚资源的含义:你要操作什么,什么就是线程的资源!
1.先说一下多线程执行各自的资源:
执行各自的资源从字面意思就可以看出来线程执行的资源互不干涉,各自执行各自的。
案例如下:

package TestThread;public class TicketsThread {     public static void main(String[] args) {         Tickets tickets1 = new Tickets();           tickets1.start();         Tickets tickets2 = new Tickets();           tickets2.start();        }}class Tickets extends Thread{    private int num=10;    @Override    public void run() {       while(num>0){           sale();       }    }        synchronized void sale() {              if(num > 0){                    System.out.println(Thread.currentThread().getName() + "卖出一张票,还剩余"+ (--num) + "张票。");                  try{                        Thread.sleep(100);                    }catch(InterruptedException e){                        e.printStackTrace();                    }                }            }    }

控制台输出:
这里写图片描述
次案例我开了两个线程,操作各自的资源!
这是我开启的两个线程:

   Tickets tickets1 = new Tickets();           tickets1.start();         Tickets tickets2 = new Tickets();           tickets2.start();        

从控制太打印结果可以看出来,各自操作各自的10张票,互不干涉,
这段代码是打印线程名称:

Thread.currentThread().getName()

2.说一下多线程共享同一资源:
共享同一资源源从字面意思就可以看出来两个以上线程执行同一资源。
案例如下:

package TestThread;public class TicketsThread {     public static void main(String[] args) {         Tickets tickets = new Tickets();             new Thread(tickets).start();           new Thread(tickets).start();  }}class Tickets extends Thread{    private int num=10;    @Override    public void run() {       while(num>0){           sale();       }    }        synchronized void sale() {              if(num > 0){                    System.out.println(Thread.currentThread().getName() + "卖出一张票,还剩余"+ (--num) + "张票。");                  try{                        Thread.sleep(100);                    }catch(InterruptedException e){                        e.printStackTrace();                    }                }            }    }

控制台打印结果:
这里写图片描述
此案例我开了两个线程操作以同一资源类似于火车站两个窗口同时卖票系统,
两个线程操作共同的10张票,按照顺序依次递减,
以下是操作同一资源的代码:

 Tickets tickets = new Tickets();             new Thread(tickets).start();           new Thread(tickets).start(); 

这样就很轻松的理解了多线程操作同一资源,和各自资源!!!!!