Synchronized用法
2015-12-02 16:16
405 查看
package com.test.test; public class Fool { public synchronized void m1(String h) { System.out.println(h); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public synchronized static void m2(String w) throws InterruptedException { System.out.println(w); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { final Fool foo=new Fool(); Thread t=new Thread(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 foo.m1("hello"); try { foo.m2("1"); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }); t.start(); final Fool f=new Fool(); Thread tt=new Thread(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 try { f.m1("world"); f.m2("2"); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }); tt.start(); } }
Synchronized 如果修饰 static则为类锁, 修饰其他方法则为对象锁
类锁:对象访问是互斥的
对象锁:多个不同的对象访问不互斥 ,多个线程绑定相同的对象则产生互斥
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- C#实现终止正在执行的线程
- Java线程编程中的主线程讲解
- 解析Java线程同步锁的选择方法