栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决线程安全问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决线程安全问题

 多线程  首先自问什么是线程

自答 线程就是应用程序启动时候在cpu执行的时候的一个桥梁路径 称之为线程

再问 怎么创建线程 

自答 两种方式 一种继承Thread 一种实现Runnable接口

还问 怎么启动线程

针对继承Thread的方式 可以直接Thread t = new Thread(),重写run方法 然后t.start方法启动

再对实现Runnable接口 可以多态Runnable run = new RunnableImpl(),然后在实现

Thread t = new Thread (run),再次t.start 启动 第二种看似多出一步,但是因为是实现接口 所以扩展性 灵活性都要优于继承。

明天再问 准备回家 

接着问 

 线程安全有几种方式?

 1.synchronized代码块 

 2. synchronized方法  静态synchronized方法 

 3.使用Lock锁

 

package cn.itcast.day12.demo09;



import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


public class RunnableImpl implements Runnable {
    // 定义一个多线程共享资源
    private int ticket = 100;
    // 1.在成员位置创建一个ReentrantLock对象
       Lock l = new ReentrantLock();
    // 设置线程任务 卖票
    @Override
    public void run() {
        // 使用死循环 让卖票操作重复操作
        while (true) {
            //  2.在有可能会出现安全问题的代码前调用Lock接口中的方法Lock获取锁
            l.lock();

            // 先判断票是否存在
            if (ticket > 0) {
                // 提高安全问题出现的概率,让程序睡眠
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");
                ticket--;
            }
            l.unlock();
        }
    }

}
package cn.itcast.day12.demo09;




public class Demo01Ticket {
    public static void main(String[] args) {
        // 创建Runnable接口的实现类
        Runnable run = new RunnableImpl();
        // 创建Thread类对象 构造方法中传递Runnable接口的实现类对象
        Thread t = new Thread(run);
        Thread t1 = new Thread(run);
        Thread t2 = new Thread(run);
        // 调用start方法开启多线程
        t.start();
        t1.start();
        t2.start();

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号