多线程-阿里云开发者社区

开发者社区> 一条coding> 正文

多线程

简介: 多线程
+关注继续查看

 

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遇到了异常;


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10080 0
Java多线程--线程操作范例
<h1>1、实例要求</h1> <div> <span style="white-space:pre"></span>设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间:</div> <div> <span style="white-space:pre"></span>线程A : 休眠10秒</div> <div> <span style="white-s
874 0
Java多线程-线程状态
线程状态 6个状态定义:java.lang.Thread.State New: 尚未启动的线程的线程状态。 Runnable: 可运行线程的线程状态,等待CPU调度。 Blocked: 线程阻塞等待监视器锁定的线程状态。
701 0
多线程简单复习
//线程回调函数 DWORD __stdcall ThreadPoc(PVOID pParam) { Sleep(10000); AfxMessageBox(_T("线程终止了")); return 10; } void CMutiThreadStudyDlg::OnBnClic...
542 0
java-多线程 | 线程安全和线程同步
线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
1224 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13885 0
多线程基础
需要了解的概念 并发和并行 并发侧重于任务的交替执行,同一时间只能执行一个任务;而并行是任务的同时执行,统一时间可以有多个任务被执行。 单核CPU与多核CPU下任务表现分别为并发与并行。 临界区 临界区用于表示一种公共资源或是共享数据,可以被多个线程使用,但是同一时间内,只能有一个线程在使用它。
691 0
+关注
121
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载