java线程的基本知识


Runnable方式可以避免Thread方式由于java单继承带来的缺陷
Runnable的代码可以被多个线程(Thread实例)共享,适用于多个线程处理同一资源的情况

synchronized
同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用
synchronized 修饰的方法 或者 代码块。

volatile
用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。

尽量不用stop方法。
interrupt()方法不能正确的停止线程,因为interrupt的状态会被清除,并不能停止如sleep等方法,并会抛出异常。

用户线程:运行在前台
守护线程:运行在后台,为其他前台线程服务(例子:垃圾回收线程)
  • setDaemon(true)必须在start()方法执行前调用,否则会抛出IllegalThreadStateException异常
  • 在守护线程中产生的新线程也是守护线程
  • 不是所有的任务都可以分配给守护线程。比如读写操作或计算逻辑

使用jstack和jvisualvm来查看线程
jstack作用:生成JVM当前时刻线程的快照(threaddump,即当前进程中所有线程的信息)
jstack目的:帮助定位程序出现的原因,如长时间停顿,cpu占用率过高等

使用jstack -l pid 查看当前的线程打印的信息

Thread常用方法:
static void sleep(long millis)    //线程休眠
static void sleep(long millis, int nanos)
void join()                                //其他线程等待当前线程中止
void join(long millis)
void join (long millis, int nanos)
static void yield()                    //当前运行线程释放处理器资源
static Thread currentThread()//返回当前运行的线程引用


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值