Java16-1 Runnable接口初识

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--;
                }
            }   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,297评论 0 23
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,199评论 18 399
  • TTT课程结束,我与培训老师的一次谈话。 老师:这是一个简单的思维导图,中心是坦白讲这个节目,分枝有些自己的想法,...
    冉旭坦白讲阅读 796评论 0 0
  • 临近十一,心情颇杂。 今年是二O一八,百年前一九一八。 如今是共和国时代,百年前是北洋时代。 今天的中国经济规模与...
    人间三十年阅读 105评论 0 1
  • //etc下找到profire文件,添加你的SDK/JDK目录(永久生效) //终端执行 vi .bash_pro...
    帝龙至尊阅读 2,232评论 0 1

友情链接更多精彩内容