博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程之同步函数
阅读量:6713 次
发布时间:2019-06-25

本文共 1949 字,大约阅读时间需要 6 分钟。

  1. 同步函数使用的锁是this
  2. 同步函数和同步代码块的区别?
    • 同步函数的锁固定是this。
    • 同步代码的锁是任意的对象。
    • 建议使用同步代码块。
  1. 静态同步函数使用的锁是该函数所属的字节码文件对象,可以使用getClass方法获取,也可以使用当前类.class来获取。

  

 

  设计模式之单例模式

  

package com.google.thread;/** * 饿汉式 *  * @author CAOXIAOYANG *  *//*class Single {	private static final Single s = new Single();	private Single() {	}	public static Single getInstance() {		return s;	}}*//** * 懒汉式 * @author CAOXIAOYANG * *//*class Single {	private static Single s = null;	private Single() {	}	public static Single getInstance() {		if(s==null){			s = new Single();		}		return null;	}}*/public class ThreadDemo extends Thread {	public static void main(String[] args) {	}}

  单例模式的线程安全性问题。

 

  死锁问题

  死锁的原因

    两个及两个以上的线程竞争对方的资源

  死锁的代码。

  

1 package com.google.thread; 2 /** 3  * 死锁的示例。 4  * @author CAOXIAOYANG 5  * 6  */ 7 class Ticker implements Runnable{ 8     public static int num = 100; 9     Object obj=new Object();10     boolean flag = true;11     public void run() {12         if (flag) {13             while (true) {14                 synchronized (obj) {
//同步函数的锁是this15 fun();16 }17 }18 }else{19 while (true) {20 fun();21 }22 }23 24 }25 private synchronized void fun() {26 synchronized (obj) {27 if (num > 0) {28 System.out.println(Thread.currentThread().getName() + "......." + num--);29 }30 }31 }32 }33 public class ThreadDemo extends Thread {34 public static void main(String[] args) {35 Ticker t = new Ticker();36 Thread t1=new Thread(t);//创建线程37 Thread t2=new Thread(t);38 39 t1.start();//开启线程40 try {41 Thread.sleep(1);42 } catch (InterruptedException e) {43 e.printStackTrace();44 }45 t.flag=false;46 t2.start();47 }48 }

 

转载于:https://www.cnblogs.com/CAOXIAOYANG/p/8988973.html

你可能感兴趣的文章
Cogs 1672. [SPOJ375 QTREE]难存的情缘 LCT,树链剖分,填坑计划
查看>>
同一个工程下使用多个.C文件的设计(模块化设计)
查看>>
java贪吃蛇
查看>>
history
查看>>
LeetCode-4Sum
查看>>
GraphicsMagick安装&make命令使用
查看>>
多个单独图片进行上传,并预览
查看>>
全国Ⅱ卷理科数学2013-2018年高考分析及2019年高考预测
查看>>
[吴恩达机器学习笔记]15非监督学习异常检测4-6构建与评价异常检测系统
查看>>
类型强转【Delphi版】
查看>>
Vue
查看>>
Linux中find常见用法示例
查看>>
c语言中enum类型的正确使用方法(注意定义的格式)
查看>>
51Nod - 1228 序列求和 (自然数幂和+伯努利数)
查看>>
oracle 定时任务(DBMS_JOB)
查看>>
正则的使用
查看>>
poj 1086 Parencodings
查看>>
LinkedHashMap和HashMap的比较使用
查看>>
TYVJ P1023 奶牛的锻炼 Label:dp
查看>>
二分图的最小顶点覆盖 最大独立集 最大团
查看>>