啦啦啦啦,从头整理一遍java并发的内容.开始是基本的线程操作

线程状态切换:

新建线程:

  

@Test
public void newTread(){
Thread t1 = new Thread(new Runnable() { @Override
public void run() {
System.out.println("ok...");
}
});
t1.start(); }

终止线程:

  Thread.stop() 不推荐使用。它会释放所有monitor

中断线程:

  public void Thread.interrupt() // 中断线程
  public boolean Thread.isInterrupted() // 判断是否被中断
  public static boolean Thread.interrupted() // 判断是否被中断,并清除当前中断状态

public void run(){
while(true){
if(Thread.currentThread().isInterrupted()){
System.out.println("Interruted!");
break;
}
Thread.yield();
}
} t1.start();
t1.interrupt();

sleep:

  public static native void sleep(long millis) throws InterruptedException

  

public void run(){
while(true){
if(Thread.currentThread().isInterrupted()){
System.out.println("Interruted!");
break;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("Interruted When Sleep");
//设置中断状态,抛出异常后会清除中断标记位
Thread.currentThread().interrupt();
}
Thread.yield();
}
}

挂起 and 继续执行:

  – suspend()不会释放锁
  – 如果加锁发生在resume()之前 ,则死锁发生

等待线程结束(join)和谦让(yeild)

  public final void join() throws InterruptedException
  public final synchronized void join(long millis) throws InterruptedException

  join的本质
  while (isAlive()) {
    wait(0);
  }

  线程执行完毕后,系统会调用notifyAll();

  

public class JoinMain {
public volatile static int i=0;
public static class AddThread extends Thread{
@Override
public void run() {
for(i=0;i<10000000;i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread at=new AddThread();
at.start();
at.join();
System.out.println(i);
}
}

synchronized
  – 指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁。
  – 直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁。
  – 直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类的锁。
   Object.wait() Obejct.notify()

  

最新文章

  1. Win7中怎么不经确认直接删除文件至回收站
  2. nginx 启动、重启、关闭
  3. 基础知识系列☞各版本下IIS请求处理过程区别
  4. WPF之依赖属性
  5. delphi 调用c#dll
  6. windows下eclipse+hadoop2
  7. 关于timestamp的二三事
  8. COJ 0020 30201象棋中的皇后
  9. python中使用mahotas包实现高斯模糊
  10. 【BZOJ】 2463 [中山市选2009]谁能赢呢?(博弈论)
  11. iBatis &amp; myBatis &amp; Hibernate 要点记录
  12. 深度学习之Batch Normalization
  13. OC中重写set和get方法、懒加载
  14. C#三层架构
  15. 二十、springcloud(六)配置中心服务化和高可用
  16. Redis备份及回收策略
  17. 2017-8-20 HTTP协议
  18. error CS0234: 命名空间“XXX”中不存在类型或命名空间名称“UserInfoVm”(是否缺少程序集引用?)
  19. 【甘道夫】HBase基本数据操作详解【完整版,绝对精品】
  20. 在天河二号上对比Julia,Python和R语言

热门文章

  1. 伪静态 net-IIS伪静态配置,使用URLRewriter实现伪静态
  2. C++报错:error C3874
  3. 关于Git无法提交 index.lock的解决办法
  4. robot framework 关键字Switch Browser和Select Window的区别
  5. 今日前端框架Vue学习笔记
  6. weui中的picker滑动报错
  7. 在vue项目中使用live2d
  8. springboot系列(六) 使用模板引擎
  9. Linux命令——killall 、kill 、pkill、xkill
  10. Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖