线程基础

程序:可以理解为是一组静态的代码
进程:正在进行的程序,就是静态的代码运行起来了
线程:正在执行程序中的小单元

线程的几种状态:
new     start()  CPU分配,run()  wait()     exception/over
创建线程------就绪状态------执行状态------等待状态(挂起)------异常/消亡
        |            |
        |___________________________|
            notify/notifyAll

实现线程的两种方法:
1.自己描述一个类,然后继承Thread,重写run方法,new一个线程对象,调用start()方法,让线程进入就绪状态
在这里插入图片描述
运行结果是:
张三在跑步,跑了0米了
张三在跑步,跑了5米了
李四在跑步,跑了0米了
张三在跑步,跑了10米了
李四在跑步,跑了15米了
李四在跑步,跑了25米了
李四在跑步,跑了30米了
李四在跑步,跑了35米了
李四在跑步,跑了40米了
李四在跑步,跑了45米了
李四在跑步,跑了50米了
李四在跑步,跑了55米了
李四在跑步,跑了60米了
李四在跑步,跑了65米了
李四在跑步,跑了70米了
李四在跑步,跑了75米了
李四在跑步,跑了80米了
李四在跑步,跑了85米了
李四在跑步,跑了90米了
李四在跑步,跑了95米了
李四在跑步,跑了100米了
张三在跑步,跑了20米了

meter是静态的,为什么会出现两个0米呢
因为,当CPU给张三分配碎片,执行的时候,走到了这一句:System.out.println(this.name + “在跑步,跑了” + meter + “米了”);这时meter的值是0,下面的meter = meter + 5还没来得及执行,就被停止执行了,转向李四这个线程执行,所以这个时候meter还是0.就出现了这种情况。所以需要关键字:synchronized来保证线程的安全

2.自己描述一个类,实现Runnable接口,重写run方法,没有start()方法。new一个线程对象,作为参数传递给Thread的构造方法构造Thread对象,通过Thread对象调用start()方法。
在这里插入图片描述
在这里插入图片描述
运行结果:
张三在跑步,跑了0米了
李四在跑步,跑了0米了
李四在跑步,跑了5米了
李四在跑步,跑了10米了
张三在跑步,跑了15米了
李四在跑步,跑了20米了
张三在跑步,跑了25米了
李四在跑步,跑了30米了
张三在跑步,跑了35米了
张三在跑步,跑了45米了
张三在跑步,跑了50米了
张三在跑步,跑了55米了
张三在跑步,跑了60米了
张三在跑步,跑了65米了
张三在跑步,跑了70米了
张三在跑步,跑了75米了
张三在跑步,跑了80米了
张三在跑步,跑了85米了
张三在跑步,跑了90米了
张三在跑步,跑了95米了
张三在跑步,跑了100米了
李四在跑步,跑了40米了

注意线程什么时候执行我们是决定不了的,是由CPU分配的。所以几乎每次运行的结果都是不一样的。
另外,有一个方法,设置线程的优先级别.setPriority();参数是int类型的,0-10,10的优先级别最高

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值