java线程以及synchronized关键字的使用

原创 2015年07月07日 17:02:59

有些东西花了好久看明白了,但是由于没有记录的缘故,过一段时间重新使用的时候又忘记了,所以为了使自己的努力可以复用,就写个文章记录一下自己关于线程的理解。


线程使用的两种方法:

1.继承Thread类

2.实现Runnable接口


习惯用第二种方法,构造器要传递实现Runnable类的对象


多线程很重要的一个问题:


构造对象的个数:

如:

package com.zk.thread;

public class ThreadTest implements Runnable
{

	protected int countDown=10;
	private static  int taskCount=0;
	private final int id=taskCount++;
	public ThreadTest(){};
	public ThreadTest(int countDowm)
	{
		this.countDown=countDowm;
	}
	public String status()
	{
		return "#"+id+"("+(countDown>0?countDown:"liftoff")+")"+":";
	}
	@Override
	public void run()
	{
		while(countDown-->0)
		{
			System.out.println(status());
			Thread.yield();
		}
		
	}
	   public static void main(String[] args)
	{
		ThreadTest thread=new ThreadTest();
		thread.run();
	}
}
这是一个简单的实现Runnable接口的一个类,main函数一个线程。看下面另一个main函数:

package com.zk.thread;

public class MoreBasicThread
{
      public static void main(String[] args)
	{
		for(int i=0;i<5;i++)
		{
			new Thread(new ThreadTest()).start();
			System.out.println("waiting for liftoff"+i);
		}<pre name="code" class="java">public static void main(String[] args)
	{
                 ThreadTest test=new ThreadTest();
		for(int i=0;i<5;i++)
		{
			new Thread(test).start();
			System.out.println("waiting for liftoff"+i);
		}
	}

}}

注意虽然5个线程,但是每个线程都依赖于不同的对象,有5个实例,这样的话5个线程对立完成5个任务,若要完成一个任务,则需要同一个对象
第二个问题是synchronized关键字的使用。
并发时候,由于线程的分发是随机的,对于多个cpu的计算机,当多个线程作用于同一个对象的时候,可能出现抢占资源的问题,这时就需要控制,使得任务串行进行,即当一个线程工作时候,其他线程为阻塞状态,这就需要使用synchronized关键字,当synchronized作用在某个方法上时,这个方法就不允许多个线程同时访问。
注意:必须是多个线程同时依赖于同一个对象时候才有效,上面的第一个例子,多个任务作用于不同的对象,这时候synchronized就不起作用了,没有意义了。


Java基础-synchronized关键字的用法

顾名思义是用于同步互斥的作用的。 这里精简的记一下它的使用方法以及
  • cq361106306
  • cq361106306
  • 2014年08月21日 21:02
  • 4653

java的关键字synchronized用法总结

第一篇:   使用synchronized   在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,...
  • u010586698
  • u010586698
  • 2016年06月27日 21:04
  • 1363

synchronized关键字的4种用法

1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程...
  • qq441568267
  • qq441568267
  • 2016年11月21日 14:41
  • 218

多线程之synchronized关键字详解

synchronized关键字用于多线程访问程序中的共享资源时实现顺序同步访问资源。可以修饰方法或者代码块。而且关键字synchronized取得的锁都是对象锁,什么叫对象锁呢,就是一个对象产生一把锁...
  • Trigl
  • Trigl
  • 2016年04月15日 20:23
  • 2219

Java线程同步中关键字synchronized简述

Java线程同步中关键字synchronized简述 一、作用: synchronized关键字通过修饰一个方法或者声明一个代码块,从而产生一个同步对象锁以及对应的同步代码块。每当...
  • beiyus
  • beiyus
  • 2015年10月14日 13:40
  • 1756

Java多线程:慎重使用volatile关键字

volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。如果这些简单数据类型声明为volatil...
  • langjian2012
  • langjian2012
  • 2014年11月16日 19:38
  • 2325

Java关于Synchronized关键字在不同位置使用的理解

Java中的Syncronized关键字可以用来修饰同步方法:像这样synchronized void f() {/*body*/}和同步语句块:像这样synchronized(object){/*b...
  • yuyuanhuang
  • yuyuanhuang
  • 2015年03月10日 15:58
  • 2360

多线程之互斥锁(synchronized关键字)

synchronized关键字经常被用来做线程互斥锁,但是使用不当的话,经常达不到目的。初学者常对锁住的是对象还是类有疑问。 原理:无论是对象还是类都有唯一的锁,synchronized只是声明了函...
  • g414917512
  • g414917512
  • 2017年09月12日 14:47
  • 243

java多线程(四)synchronized关键字修饰方法

在之前的博客中我们介绍了条件对象和锁对象,两者结合使用才能起到比较好的互斥与同步效果,大家可能觉得有些麻烦,有没有将两者结合起来的工具呢,有!java提供了synchronized关键字来实现线程的互...
  • xingjiarong
  • xingjiarong
  • 2015年08月24日 08:49
  • 4050

java中synchronized关键字的认识&记录

通过具体项目中在线程间同步遇到的问题(app无响应ANR)来阐述synchronized关键字的使用场景。...
  • bibingyan
  • bibingyan
  • 2017年02月21日 20:27
  • 336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java线程以及synchronized关键字的使用
举报原因:
原因补充:

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