java 线程安全 锁

两个线程A,B。调用同一加锁代码块C,假如A先调用C,在A线程调用C完成之前,B线程要调用此代码块必须先等待,等A调用完成,B立马执行C.

package test;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import net.sf.json.JSONObject;

import com.hlzt.wx.util.http.WxHttpClientUtils;
import com.hlzt.wx.util.msg_handler.MsgDispatcher;

public class ss {

	 public static void main(String[] args) throws UnsupportedEncodingException {
		 ddd d=new ddd("aaaaaaaaaaaaaa");
		 d.start();
		 ddd d2=new ddd("bbbbbbbbbbbbbb");
		 d2.start();

	}

	 public synchronized static void aa(String str)
		{
			System.out.println("1#########"+str);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			System.out.println("2#########"+str);

		}

}

class ddd  extends Thread{
	private String aaa;

	public ddd(String aaa) {
		this.aaa = aaa;
	}

	@Override
	public void run() {
		ss.aa(aaa);
	}

}
时间: 2024-10-01 07:49:50

java 线程安全 锁的相关文章

Java线程之锁研究

JDK1.5以后,在锁机制方面引入了新的锁-Lock,在网上的说法都比较笼统,结合网上的信息和我的理解这里做个总结. JAVA现有的锁机制有两种实现方式.JDK1.4前是通过synchronized实现.JDK1.5后加入java.util.concurrent.locks包下的各种lock.先看一看代码层的区别. synchronized 在代码中synchronized类似"面向对象",修饰类.方法.对象. Lock 不作为修饰,类似"面向过程",在方法中需要锁

解析Java线程同步锁的选择方法_java

在需要线程同步的时候如何选择合适的线程锁?例:选择可以存入到常量池当中的对象,String对象等 复制代码 代码如下: public class SyncTest{    private String name = "name";public void method(String flag)    {        synchronized (name)        {            System.out.println(flag + ", invoke metho

Java线程:新特征-锁(上)

在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在 java.util.concurrent.locks 包下面,里面有三个重要的接口Condition.Lock.ReadWriteLock. Condition Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-se

Java线程:新特征-锁(下)

Java中读写锁有个接口java.util.concurrent.locks.ReadWriteLock,也有具体的实现ReentrantReadWriteLock,详细的API可以查看JavaAPI文档. 下面这个例子是在文例子的基础上,将普通锁改为读写锁,并添加账户余额查询的功能,代码如下: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.

线程-懂java中lock锁的请进

问题描述 懂java中lock锁的请进 package thread; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class Foo { private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = r

JAVA语言规范-线程和锁章节之同步、等待和通知

原文链接  本文是Oracle官方<Java语言规范>的译文 JAVA语言规范:线程和锁 1 同步 JAVA编程语言提供了线程间通信的多种机制.这些方法中最基本的是同步化,此方法是使用监视器实现的.JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视器.一次仅有一个线程可能在监视器上持有锁.尝试锁住该监视器的任何其他线程被阻塞,直到它们可以再该监视器上获得一个锁.线程t可以多次锁住特别的监视器:每个解锁将一个加锁操作的作用反转来了. synchronized语句计算了一个对象的引用

JAVA语言规范:线程和锁

JAVA语言规范:线程和锁 概述: 前面章节的大多数讨论,都是关于通过单线程一次执行单个语句或者表达式.而JAVA虚拟机可以支持多线程同时执行.这些线程可以独立执行代码操作,而操作后所产生的值会保留在共享内存当中.单处理器和多处理器都能支持多线程,它们都是通过分配CPU时间片来执行代码. 线程由Thread类表示.用户创建线程的唯一方式是创建此类的一个对象:每个线程和这样的一个对象相关.当在相应的Thread对象上调用start()方法是,一个线程将启动. 线程的行为,特别是当不正确同步时,容易

Java线程模型缺陷研究

Java 编程语言的线程模型可能是此语言中最薄弱的部分.它完全不适合实际复杂程序的要求,而且也完全不是面向对象的.本文建议对 Java 语言进行重大修改和补充,以解决这些问题. Java 语言的线程模型是此语言的一个最难另人满意的部分.尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境. 关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库.我

Java线程的深入探讨

一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其 称为程序(Program).所谓"线程"(Thread),是"进程"中某个单一顺序的控制流. 新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线 程视为基本执行单位.线程也是Java中的相当重要的组成部分之一. 甚至最简单的Applet也是由多个线程来完成的.在Java中,任何一个Applet的 paint()和upd