Java

Java16-1 Runnable接口初识

2018-11-06  本文已影响0人  第二套广播体操

Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run 。

创建线程的第二种方式,实现Runnable接口

1、定义一个类实现Runnable接口
2、覆盖Runnable接口中的run方法,将线程要运行的方法储存在该方法中
3、通过Thread类创建线程对象,并将实现Runnable类的对象作为Thread类构造函数的参数进行传入
4、调用Thread类中的start方法开启线程

class Tacket implements Runnable{
    private int tacket=50;
    public void sale(){
        while (tacket>0)
            
            System.out.println("线程销售: "+Thread.currentThread().getName()+"销售票次: "+tacket--);
    }
    @Override
    public void run() {
        sale();
    }
}
public class SaleTacket {
    public static void main(String[] args) {
        //线程任务对象
        Tacket tpt=new Tacket();
        //线程对象
        Thread t1=new Thread(tpt,"窗口1");
        Thread t2=new Thread(tpt,"窗口2");
        t1.start();
        t2.start();
    }
}

多线程的安全问题
1、线程问题有处理到共同的数据
2、线程任务中有多条对共享数据的操作
一个线程在操作共享数据的过程中,其他线程参与了运算。造成了数据错误
可以使用 synchronized()方法解决 adj.同步的
只要保证多条操作数据的代码在同一时间,被一条线程执行
解决方法 1.同步代码块 2.同步函数

synchronized(对象)
{     //需要同步的代码
}

同步了在目前状况下保证了一次只能有一个线程在执行,其他线程进不来
好处:解决了多线程的安全问题
弊端:降低效率
有可能出现一种情况
多线程安全问题出现后,加入了同步机制,安全问题依旧
只要遵守同步的前提 就可以解决
同步的前提:多个线程必须使用同一个锁,这才是对多线程的同步

 public void run() {
            synchronized (object){
                while (tacket>0)
                {
                    System.out.println("线程销售: "+Thread.currentThread().getName()+"销售票次: "+tacket);
                    tacket--;
                }
            }   }
上一篇下一篇

猜你喜欢

热点阅读