java多线程问题总结

原创 2016年08月29日 19:30:50
1、synchronized关键字修饰的同步函数使用什么对象作为锁?

分为两种情况,如果该函数为静态的则采用所在类的class锁,否则采用this锁,测试用例如下:

class test{
	public synchronized void f1() throws InterruptedException{  
		System.out.println("进入f1");
		Thread.sleep(5000);
		System.out.println("离开f1");
	}
	
	public void f2(){
	      synchronized (this){
		System.out.println("进入f2");
	      }
	}
}

public class thread{
       public static void main(String[] args) throws InterruptedException {
       test t=new test();   
       Thread t1=new Thread(new Runnable() {
		  @Override
		  public void run() {
			t.f1();
		  }
	    });

       Thread t2=new Thread(new Runnable() {
		 @Override
		 public void run() {
			t.f2();
		 }
	   });
       
       t1.start();
       t2.start();
   } 
}
输出结果:
进入f1
离开f1
进入f2
我们可以看到,只有当线程t1释放锁后,线程t2才能进入f2,说明同步方法和同步代码块采用的是同一个this锁,class锁的测试则给f1添加static关键字,f2使用test.class锁。


Java多线程并发总结

Java多线程1.实现方式: 继承Thread,实现Runnable接口 Thread类,继承不灵活,不能资源共享 Runnable是接口,...
  • a466350665
  • a466350665
  • 2015年10月16日 13:16
  • 575

java中线程相关知识点大总结

一、Java线程:概念与原理 1、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存...
  • xuweilinjijis
  • xuweilinjijis
  • 2013年05月03日 09:50
  • 5587

Java多线程笔记总结

1.线程的三种创建方式参考之前的总结: 多线程-创建线程的三种方式对比三种方式: 通过继承Thread类实现 通过实现Runnable接口 实现Callable接口 第1种方式无法继承其他类,第2,3...
  • neven7
  • neven7
  • 2015年12月22日 10:05
  • 656

java多线程_思维导图总结3

  • BiLaHePan
  • BiLaHePan
  • 2016年06月03日 20:06
  • 1372

Java多线程基础总结

Java采用多线程方式实现并行计算,当然并行计算也可以采用多进程方式实现,但是进程切换耗费比较高。而且进程间是隔离的,进程间通信机制比较麻烦,最后JVM本身在操作系统中就一个进程,由它再启动一个进程不...
  • HackerSaillen
  • HackerSaillen
  • 2015年08月19日 08:53
  • 1168

【多线程】java多线程知识点总结

写在前面: 这篇文章是我最近看15个顶级Java多线程面试题及回答这篇帖子,根据文中所列问题在网上找的答案汇总。或许某些解答不尽如人意,欢迎大家来补充和指正。另外感谢这篇帖子的翻译者赵峰以及所有在网...
  • moshenglv
  • moshenglv
  • 2016年07月18日 17:20
  • 1285

Linux多线程编程小结——干货

对于linux下的多线程而言,这里我们需要区分几个概念: 1、信号量 2、互斥变量(递归和非递归) 3、条件变量 4、共享锁(读写锁)(适用于读的次数远大于写的情况)   信号量(sem)...
  • xuziqu
  • xuziqu
  • 2015年08月22日 22:01
  • 724

【总结】JAVA多线程与并发学习总结分析

http://www.djxz.com/article/40633.htm 1.计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行;当运算结束...
  • brandohero
  • brandohero
  • 2015年01月20日 11:46
  • 734

Java多线程-线程池学习总结

1.使用线程池的原因 线程过多会使统性能降低,因为它会导致额外的上下文环境切换开销,甚至导致栈溢出OutOfMemoryError。 减少线程创建和销毁的开销,每个工作线程都可重复的使用,执行...
  • elricboa
  • elricboa
  • 2017年11月21日 00:24
  • 86

Java多线程和并发性知识点总结

一、 什么是进程、线程?线程和进程的区别? 1. 进程 当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序。 进程是操作系统进行资源分配和调度的一个独立单位。 进程的三个特征:...
  • u010169720
  • u010169720
  • 2015年12月24日 15:55
  • 552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java多线程问题总结
举报原因:
原因补充:

(最多只允许输入30个字)