Concurrency

为了提升程序性能,我们可以将任务分成互相独立的子任务并使用多线程来处理。这里提供了详细的讲解,本文是作者的读书笔记。

线程的生命周期:New, Waiting, Running, Dead等。

线程具有优先级,从MIN_PRIORITY(1)到MAX_PRIORITY(10),线程的默认优先级为NORM_PRIORITY(5),优先级越高,越容易被执行。

有两种方式来创建thread,by implementing Runnable Interface, by extending Thread class。

Implementing Runnable Interface

1. 创建实现Runnable接口的类并实现其run()函数;

2. 利用Thread类的Thread(Runnable threadObj, String threadName)来创建thread;

3. 调用thread的start()方法来执行线程。

Extending Thread Class

1. 通过继承Thread class来生成thread并override起run()函数;

2. 调用Thread的start()方法来执行线程。

Inter-thread communication

我们可以在thread之间使用wait(),notify()进行控制,如下所示。synchronized用于确保对象或方法在同一时间只能被一个线程访问。

public boolean flag = false;

public synchronized void Question(String  msg){

    if(flag){

          try{

                wait();

          }catch(InterruptedException e){

                e.printStackTrace();

         }

     }

    System.out.println(msg);

   flag = true;

   notify();

}

ThreadLocal class

Threadlocal class 创建的变量在每个thread中保存一个备份,只能被本线程读写,因此,不会受其他线程影响。下面的两个counter,counter会受不同线程的影响,而threadLocalCounter只受本线程的影响,不受其他线程影响。

class RunnableDemo implements Runnable {  

int counter;  ThreadLocal threadLocalCounter = new ThreadLocal();

public void run() {

counter++;

if(threadLocalCounter.get() != null){

threadLocalCounter.set(threadLocalCounter.get().intValue() + 1);

}else{

threadLocalCounter.set(0);

}

System.out.println("Counter: " + counter);

System.out.println("threadLocalCounter: " + threadLocalCounter.get());

}

}

Deadlock是因为由于多个线程需要相同的locks,但是以不同顺利获得这些locks造成的。

lock和synchronized的区别:1.synchronized不能保证顺序,而lock可以;2. synchronized block没有timeout,而lock可以提供timeout功能;3.synchronized只能作用于同一个函数,而lock的lock()和unlock()函数可以用于不同的函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Java is a multi threaded programming language. A multi-th...
    Hackjutsu阅读 714评论 0 1
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,994评论 1 18
  • 今天在朋友圈刷到了高中的校门和高中的校服。 从2013年6月毕业,到现在2016年12月,已经过去了3年6个月。 ...
    伽轻阅读 206评论 0 0
  • 5点40,太阳都还没睡清醒,院里就已经传来了操练的声音了,这之间不时夹杂着孩子清脆的嗓音,“一--二--三...
    花生的小卷毛阅读 319评论 0 0