文档章节

线程实现的两种方式及synchronized 关键字

勇恒
 勇恒
发布于 2017/07/04 23:08
字数 188
阅读 4
收藏 0
点赞 0
评论 0

## thread实现两种方式:继承Thead和实现runnable接口

记住:new Thread().start() 和 new Thread.run()方法截然不同:

start会启动多线程跑,而run方法只是一个普通的运行方法,由主线程阻塞执行。

 

## synchronized是java的关键字,安全,但效率低。

当某个线程锁抛异常时,jvm会自动释放当前锁。

public class MySynchronized {
    public static void main(String[] args) {
        final MySynchronized mySynchronized1 = new MySynchronized();
        final MySynchronized mySynchronized2 = new MySynchronized();
        new Thread("thread-1"){
            public void run(){
                synchronized (mySynchronized1){

                    try {
                        System.out.println(this.getName()+":start");
                        int a = 1/0;//出现异常时,jvm释放锁
                        Thread.sleep(3000);
                        System.out.println(this.getName()+":sleep");
                        System.out.println(this.getName() + ":end");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }.start();
        new Thread("thread-2"){
            @Override
            public void run() {
                synchronized (mySynchronized1){//同一把锁,会等待
                    //synchronized (mySynchronized2){//
                    System.out.println(this.getName()+":start22");
                }
            }
        }.start();
    }
}

© 著作权归作者所有

共有 人打赏支持
勇恒
粉丝 2
博文 92
码字总数 56670
作品 0
杭州
JAVA 多线程编程

什么是线程 在当前的编程语言中,进程与线程是两种基本的运行单位 在操作系统运行时,可以看到多个进程在运作,而每个进程内又至少有一个线程在运行(主线程) 可以说,线程是当前最小的运行...

codetask ⋅ 2016/12/19 ⋅ 0

深入理解ReentrantLock

在Java中通常实现锁有两种方式,一种是synchronized关键字,另一种是Lock。二者其实并没有什么必然联系,但是各有各的特点,在使用中可以进行取舍的使用。首先我们先对比下两者。 实现: 首先...

孟飞阳 ⋅ 2016/07/25 ⋅ 0

不使用synchronized和lock,如何实现一个线程安全的单例?

刚刚,在我的微信公众号(hollishcuang)上发了一条问题:不使用和,如何实现一个线程安全的单例? 瞬间收到了数百条回复。回答最多的是静态内部类和枚举。很好,这两种确实可以实现。 枚举 ...

⋅ 2017/09/06 ⋅ 0

Java 多线程同步的五种方法

一、引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊。闲话不多说,进入正题。 二、为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有...

vshcxl ⋅ 2016/12/21 ⋅ 0

没听说过这些,就不要说你懂并发了,three。

转自http://www.cnblogs.com/zuoxiaolong/p/con2.html 并发编程的简单分类      并发常见的编程场景,一句话概括就是,需要协调多个线程之间的协作,已保证程序按照自己原本的意愿执行。...

付翔 ⋅ 2015/03/25 ⋅ 0

Java设计模式之-单例模式(Singleton)

先说一下我自己对单例模式的理解: 单例模式:在整个程序运行周期内,某个类被设计为其所有实例都归属于一个副本,以保证含义上的唯一性和行为上的总控性。这种类的设计方式被称为单例模式。...

Mock2052 ⋅ 2017/11/23 ⋅ 0

java 里面保留字volatile及其与synchronized的区别

最近在读java并发编程相关的书籍,蚂蚁金服团队的杰作,可以好好把java并发相关的内容好好研究一下 要理解volatile和synchronized的区别,首先还是需要来理解下java的内存模型 java内存模型 ...

十二缸帕萨特 ⋅ 2015/10/09 ⋅ 0

多线程——线程安全问题

1.什么是线程安全 多线程对共享资源进行访问,访问的代码不会出现不确定的结果。 2.如果保证线程安全 A.采用线程同步的方法。 (1)采用synchronized关键字(同步机制见他文) (2)采用显示...

亚特兰缇斯 ⋅ 2015/03/07 ⋅ 0

双从检查

一、科普定义 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步关键字相信大家都用得比较多,在上一篇“多个线程之间共享数据的方式”中也详细列举他的应用,在这就...

vshcxl ⋅ 2016/07/29 ⋅ 0

core Java基础知识汇总

collection和collections有什么区别? collection是一个接口集合,它提供了一系列对集合对象进行操作的通用接口方法,设计这个接口的目的是为各种不同的集合提供一个统一的接口方法。 collec...

瑞克3号 ⋅ 2017/11/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部