设为首页 加入收藏

TOP

Java多线程及线程安全详解(二)
2018-06-04 08:51:16 】 浏览:186
Tags:Java 线程 安全 详解
bsp;     + ticketCount + "张票");
                    ticketCount--;
                    try {
                        Thread.sleep(500);//每隔500毫秒 线程休眠 随后自己自动会唤醒(目的是为了调节线程速度)
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        // e.printStackTrace();
                    }
                }
            }
        }
    }
 
}


2、同步方法:


public class SaleWindow implements Runnable {
    private int ticketCount = 10;
     //默认固定的锁对象this<br>        //将产生线程安全的代码封装到方法里并设置成同步方法
    public synchronized void syncB() {
        if (ticketCount > 0) {
            // 字符串拼接信息 变量+"" 就可以拼接成字符串
            System.out.println(Thread.currentThread().getName() + "卖出"
                    + ticketCount + "张票");
            ticketCount--;
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                // e.printStackTrace();
            }
        }
    }
 
    @Override
    public void run() {
        // TODO Auto-generated method stub
        // 多个窗口卖票
        for (int i = 0; i < 10; i++) {
            syncB();
        }
    }
 
}


结果图:



最后结果每个窗口不能卖同样的票解决了线程安全问题


(ps:线程之间的通信和线程安全无关联二者不是一回事)


线程之间是相互独立的互不联系 而真正意义上的通信是通过中间件(同步锁 必须是同一把锁)来达到线程之间通信的目的


案例:二个线程来回交替输出一条数据(意思就是必须按照我说一句你说一句的这个规则走)


class BingB extends Thread {
    public void run(){
        for(int i = 0;i<5;i++){
            System.out.println("冰冰美,如花丑");
        }
    }
}
 
class RuH extends Thread{
    public void run(){
        for(int i = 0;i<5;i++){
            System.out.println("如花美,冰冰丑");
        }
    }
}
 
public class Test {
    public static void main(String[] args) {
        BingB bb = new BingB();
        RuH rh = new RuH();
        bb.start();
        rh.start();
    }
}


结果图:此结果不是交替出现的



要想达到交替的目的代码如下:


class MyLock{
    static Object o = new Object();
}
 
class BingB extends Thread {
    public void run(){
        for(int i =

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java多线程中的Synchronized和vol.. 下一篇Java集合类的详解与应用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目