多线程

简介: 多线程

 

java多线程操作方法:

ta.interrupt();

ta.stop() 杀死线程对象ta

20180801183121203.png

20180801183027115.png

4 线程共享变量


4.1 控制线程共享变量可见关键字volatile


Java提供了volatile关键字来保证可见性。


当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。


面试题:


ConcurrentHashMap和Hashtable区别?


答:ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对


与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分段”


机制替代 Hashtable 的独占锁。进而提高性能。



4.3 消费者和生产者模式


线程间通信机制


A:锁死现象?


面试:死锁条件是什么?


答:理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。


死锁代码?


public class DeadLock implements Runnable{

   static Object objA=new Object();


   static Object objB=new Object();


   @Override


   public void run() {

       String tname = Thread.currentThread().getName();


       if(tname.equals("t1")){

           synchronized (objA){

               System.out.println("t1锁定A....");


               synchronized (objB){

                   System.out.println("t1锁定B....");


               }


           }


           System.out.println("t1结束...");


       }else{

           synchronized (objB){

               System.out.println("t2锁定B....");


               synchronized (objA){

                   System.out.println("t2锁定A....");


               }


           }


           System.out.println("t2结束...");


       }


   }



   public static void main(String[] args) {

       DeadLock dk=new DeadLock();


       Thread t1=new Thread(dk,"t1");


       Thread t2=new Thread(dk,"t2");


       try {

           Thread.sleep(1000);


       } catch (InterruptedException e) {

           e.printStackTrace();


       }


       t1.start();


       t2.start();


   }


}


锁:


受到synchronized保护的程序代码块和方法中,要访问的对象属性必须设定为private,因为如果不设定为private,那么就可以用不同的方式来访问它,这样就达不到保护的效果了


死锁:两个线程,彼此在等待对方占据的锁

锁的归还几种方式:基本上执行完同步的程序代码后,锁就会自动归还;

1用break语句跳出同步的语句块,不过这对于写在方法声明的synchronized没有作用;

2遇到return语句;

3遇到了异常;


相关文章
|
7月前
|
前端开发 Java
|
安全 Linux C++
C++多线程
C++多线程
56 1
|
7月前
|
安全 数据库 芯片
多线程的使用
多线程的使用
61 0
|
7月前
|
C#
[C#] 多线程的使用
[C#] 多线程的使用
48 0
|
监控 Java API
多线程专题
多线程专题
|
Linux 调度 C++
|
存储 安全 Java
多线程1
多线程1-https://www.nowcoder.com/issue/tutorial?tutorialId=94&uuid=4e79fb9392af4f90b898311e8c1efe36
66 0
|
调度
多线程之争用条件
多线程之争用条件
163 2
多线程之争用条件