多线程

创建线程的两种方法:1、继承Thread。2、实现Runnable。

Runnable只有一个方法run();实现Runnable,用new Thread(Runnable run)创建线程。

1、多线程中有主内存和工作内存之分, 在JVM中,有一个主内存,专门负责所有线程共享数据;而每个线程都有他自己私有的工作内存, 主内存和工作内存分贝在JVM的stack区和heap区。

2、线程的五种状态:Ready,Running,Sleeping,Blocked,Waiting。其中Ready状态的线程正在等待分配CPU时间。

3、线程运行次序并不是按照我们创建他们时的顺序来运行的,CPU处理线程的顺序是不确定的,如果需要确定,那么必须手工介入,使用setPriority()方法设置优先级。

4、Daemon线程区别一般线程之处是:主程序一旦结束,Daemon线程就会结束。

5、一个对象中的所有synchronized方法都共享一把锁,这把锁能够防止多个方法对通用内存同时进行的写操作。synchronized static方法可在一个类范围内被相互间锁定起来。

6、synchronized会降低性能,确定需要再用他。

所有线程都运行在线程调度机制的基础上,yield(),sleep(),wait(),setPriority()只是给线程调度提出些要求和建议,但这不能保证什么。所以编程前先想想,多线程是不是你想要的,如果需要精确的控制执行顺序,放弃他。

解析:

public class Foo()
{
 private int i;
 public synchronized void A(){}
 public synchronized void B(){}
 public  void C(){}
}

类Foo中的所有synchronized方法共享一把锁,当一个对象的A方法被调用时,该对象上对B方法的调用也会进入阻塞状态,但C方法的调用正常进行。

 

在线程的run()中加入yield()、sleep()有时会使程序运行的更快。

因为运行会不断在线程间切换,加入yield()、sleep()能有效阻止这种切换。

sleep()不会使对象释放持有的锁。

wait()使本线程释放持有的锁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值