Java 多线程

用多线程只有一个目的,那就是更好的利用cpu的资源

并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。


线程安全

同步


volatile
多线程的内存模型:main memory(主存)、working memory(线程栈),在处理数据时,线程会把值从主存load到本地栈,完成操作后再save回去(volatile关键词的作用:每次针对该变量的操作都激发一次load and save)。

针对多线程使用的变量如果不是volatile或者final修饰的,很有可能产生不可预知的结果(另一个线程修改了这个值,但是之后在某线程看到的是修改之前的值)。其实道理上讲同一实例的同一属性本身只有一个副本。但是多线程是会缓存值的,本质上,volatile就是不去缓存,直接取值。在线程安全的情况下加volatile会牺牲性能。


public Thread(Runnable target)
target  - the object whose  run  method is invoked when this thread is started.


public void start()

通过调用线程对象引用的start()方法,使得该线程进入到就绪状态,此时此线程并不一定会马上得以执行,这取决于CPU调度时机。


Thread thread = new MyThread(myRunnable);
线程执行体是MyThread类中的run()方法

因为Thread类本身也是实现了Runnable接口,而run()方法最先是在Runnable接口中定义的方法。

@Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }
当执行到Thread类中的run()方法时,会首先判断target是否存在,存在则执行target中的run()方法,也就是实现了Runnable接口并重写了run()方法的类中的run()方法。但是,由于多态的存在,根本就没有执行到Thread类中的run()方法,而是直接先执行了运行时类型即MyThread类中的run()方法。


可运行线程 一旦调用start() 线程处于runnable状态。 一个可运行的线程 可能正在运行也可能没有运行,这取决于操作系统给线程提供运行的时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值