文档章节

java线程知识点

席道坤
 席道坤
发布于 2016/11/14 11:13
字数 803
阅读 25
收藏 0

一、thread  run和start区别

run:它是一个普通的成员方法,调用run方法的话,会在当前线程中执行run方法,而不会启动新线程。

start:会启动一个新线程,新线程会执行相应的run方法。

 

二、什么是多线程同步

在多线程情况下,同步可以控制对共享资源的访问,如果没有同步,当一个线程修改一个共享变量时,另一个线程使用该变量时也会受到影响。

 

三、实现多线程的几种方式

1.实现Runnable接口

2.继承Thread类

3. 实现Callable有返回结果的多线程

注:Callable与Runnable使用方法大同小异;Callable 使用call()方法,Runnable使用run()方法;

Callable  带返回结果,Runnable不带返回结果;call抛出受检查的异常( Exception  ),而Runnable没有

 

四、ThreadLocal

ThreadLocal是一个线程级别的局部变量 , ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本, 每个线程修改副本时不影响其它线程对象的副本 。

常用的使用可在DAO模式中见到,当DAO类作为一个单例类时,数据库链接(connection)被每一个线程独立的维护,互不影响。(基于线程的单例)

 

五、sleep()和wait()区别

sleep()是一个静态方法 , 这意味着只对当前线程有效 , 即便是执行t.sleep(),也是当前线程进入睡眠,而不是t线程。 wait是object的方法而不是thread, 调用object.wait()时,线程先要获取这个对象的对象锁, 把当前线程添加到等待队列中, 随后另一线程可以同步同一个对象锁来调用object.notify(),这样将唤醒原来等待中的线程,然后释放该锁。

 

六、在静态方法上使用同步会怎样

同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,因为多个线程可以同时访问不同实例同步实例方法。

 

七、 在一个对象上两个线程可以调用两个不同的同步实例方法吗

不可以, 因为一个对象已经同步了实例方法,线程就获取了对象的对象锁。

 

八、什么是死锁

死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁,而每个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。就JavaAPI而言,线程死锁可能发生在一下情况。

●当两个线程相互调用Thread.join()

●当两个线程使用嵌套的同步块,一个线程占用了另外一个线程必需的锁,互相等待时被阻塞就有可能出现死锁。

 

© 著作权归作者所有

共有 人打赏支持
席道坤
粉丝 12
博文 224
码字总数 183120
作品 0
徐汇
程序员
【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉...

你听___
05/06
0
0
【给初学者】Android学习路线

很多朋友都对学习路线问题感到迷茫,特别是还在上学的朋友们。在这里就详细的为大家介绍一下。 1.Java基础 很多朋友一上手就开始学习Android,似乎太着急了一些。Android应用程序开发是以Jav...

Jimmy Xie
2012/09/08
0
1
深入理解JAVA虚拟机学习笔记(一)JVM内存模型

上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了。这段时间也是各种忙,都一个星期没更新博客了,再不写...

曦阳x
07/23
0
0
JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和...

Java架构
07/11
0
0
Java多线程学习(五)线程间通信知识点补充

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部