实现Runnable的方式实现多线程和线程安全问题浅谈

实现Runnable的方式实现多线程:
public class RunnableTest implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i <100 ; i++) {
            System.out.println (Thread.currentThread ().getName (  )+":"+i);
        }
    }
}
public class RunnableDemo {
    public static void main(String[] args) {
        //创建RunnableDemo对象的类
        RunnableTest rt=new RunnableTest ();
        //创建Thread对象,把RunnableDemo对象作为参数传递进去
        Thread t1=new Thread (rt,"飞剑"  );
        Thread t2=new Thread (rt,"飞鸽"  );
        //启动线程
        t1.start ();
        t2.start ();
    }
}
多线程安全问题:

​ 出现安全问题的原因:1.是否是多线程环境。

​ 2.是否有共享数据。

​ 3.是否有多条语句操作共享数据。

*前两个原因是不能改变的,所以我们只能从第三个原因入手。让程序没有安全问题的环境,这需要

给多条语句操作共享数据加把锁。

​ 解决多线程安全问题的方法:

​ 1.同步代码块:

​ *格式:

​ synchronized(任意对象){

​ 多条语句操作共享数据的代码

​ }

public class Test implements Runnable{
    private int tickets=100;
    @Override
    public void run(){
        while(true){
            synchronized(){
                if(tickets>0){
                    try{
                        Thread.sleep(100);
                    }catch(InterruptedException e){
                        e.printStackrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
                        tickets--;
                }
            }
        }
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值