`
学习从点滴开始
  • 浏览: 4468 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java同步之我见

阅读更多
闲来研究了一下关于java同步的内容 直接上代码

package synch;

import java.util.ArrayList;
import java.util.List;

public class Test implements Runnable {

	public static List<String> list;

	private static int k1 = 0;
	
	private static int k2 = 0;

	public void run() {

		synchronized (list) {
			try {
				
				if(Thread.currentThread().getName().equals("线程1"))
					setK1(k1 + 1);
				if(Thread.currentThread().getName().equals("线程2"))
					setK2(k2 + 1);
				
				int k =Thread.currentThread().getName().equals("线程1") ? k1 :k2;
				
				System.out.println(Thread.currentThread().getName() + "第" + k + "个线程进来了");
				Thread.sleep(1000);
				
				
			} catch (Exception e) {
			}
		}

	}

	public static void main(String[] args) throws Exception {
		Test t = new Test();

		list = new ArrayList<String>();

		for (int i = 0; i < 100; i++) {
			Thread t1 = new Thread(t, "线程1");
			t1.start();
		}
		Thread.sleep(100);
		list = new ArrayList<String>();
		for (int i = 0; i < 100; i++) {
			Thread t1 = new Thread(t, "线程2");
			t1.start();
		}
	}

	public static synchronized int getK1() {
		return k1;
	}

	public static synchronized void setK1(int k1) {
		Test.k1 = k1;
	}

	public static synchronized  int getK2() {
		return k2;
	}

	public static synchronized  void setK2(int k2) {
		Test.k2 = k2;
	}

}


先说明一下代码的大致内容两个线程组,第一组名称是线程1,第二组名称是线程2,循环线程执行run,结果如下



对象loak对象,让同步失效
package synch;

import java.util.ArrayList;
import java.util.List;

public class Test1 implements Runnable {

	public static List<String> list;

	private static int k = 0;

	public void run() {

		synchronized (list) {
			try {

				setK(k + 1);
				list = new ArrayList<String>();
				System.out.println(Thread.currentThread().getName() + "第" + k
						+ "个线程进来了");
				Thread.sleep(100);
			} catch (Exception e) {
			}
		}

	}

	public static void main(String[] args) throws Exception {
		Test1 t = new Test1();

		list = new ArrayList<String>();

		for (int i = 0; i < 100; i++) {
			Thread t1 = new Thread(t, "线程1");
			t1.start();
		}

	}

	public static synchronized int getK() {
		return k;
	}

	public static synchronized void setK(int k) {
		Test1.k = k;
	}

}

很快执行完毕,在lock对象的时候,不要改变对象的地址!!!
 
分享到:
评论

相关推荐

    java同步网络时间

    Java同步网络时间是一个常见的任务,尤其对于需要时间精确性的应用来说非常重要。这个任务可以通过Java的NTP(Network Time Protocol)库来实现。NTP是一种互联网协议,用于在计算机之间同步时间,确保网络上的设备...

    Java文件同步开源项目Sync

    【Java文件同步开源项目Sync】是一个基于Java语言开发的实用工具,主要目的是提供高效、可靠的文件和目录同步功能。这个开源项目为开发者提供了一个简单易用的命令行接口,允许用户方便地对本地或远程文件系统进行...

    java使用datax增量同步代码

    Java 使用 DataX 进行增量同步是大数据领域中常见的数据迁移任务,DataX 是阿里开源的一个强大、高效的数据同步工具,它可以实现不同数据存储之间的数据迁移。本篇将详细讲解如何在 Java 项目中利用 DataX 实现增量...

    java多个数据库实现数据同步

    本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,我们需要理解数据同步的含义。数据同步是指在两个或多个数据库之间,当某个数据库中的数据发生改变时,这些变化能够被实时或者近实时地反映到...

    java同步大杀器concurrent 包

    java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大...

    Java同步机制浅谈

    ### Java同步机制浅谈 #### synchronized关键字的作用及应用 在Java多线程环境中,`synchronized`关键字扮演着至关重要的角色。它可以帮助开发者确保多线程环境下的数据一致性,防止因并发访问导致的数据错误。本...

    java数据实时同步系统

    Java数据实时同步系统是一种用于在不同数据库之间进行实时数据交换的技术解决方案。这种系统的主要目标是确保数据的一致性和完整性,特别是在分布式环境中,当数据需要在远程数据库和本地数据库之间频繁流动时。以下...

    java实现两个mysql同步主库的数据

    下面我们将深入探讨如何使用Java实现两个MySQL数据库之间的数据同步,以及涉及的相关知识点。 首先,我们需要理解MySQL的复制原理。MySQL的主从复制是基于日志的,主库上的所有更改都会被记录到二进制日志(binlog...

    基于Java的数据库同步工具设计源码

    数据库同步工具:基于Java开发,包含22个文件,包括9个Java类文件、2个Markdown文档、2个JAR包文件、2个XML配置文件、2个Properties配置文件、1个.gitignore文件、1个LICENSE文件、1个PNG图像文件、1个GIF图像文件、...

    java 线程同步 信号量控制同步

    Java 线程同步控制机制 线程同步是 Java 编程中的一种机制,用于控制多个线程之间的资源访问顺序,以避免线程之间的冲突和数据不一致。线程同步的目的就是避免线程“同步”执行,即让多个线程之间排队操作共享资源...

    java数据库表同步

    在Java编程领域,数据库表同步是一项关键任务,特别是在分布式系统或者需要实时数据更新的应用中。这个主题涵盖了如何使用Java来实现实时或定时地将一个数据库的表内容更新到另一个数据库,确保数据的一致性和完整性...

    java synchronize 线程同步

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,主要目的是解决多线程环境下的数据安全问题。当多个线程访问共享资源时,如果没有适当的同步控制,可能会导致数据不一致或者竞态条件等问题。线程同步...

    java同步synchronized关键字用法示例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块代码或数据时,可能会导致数据不一致的问题。为了解决这个问题,...

    Java异步调用转同步方法实例详解

    Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...

    JAVA 线程实现数据库的主从同步更新

    在Java编程环境中,数据库的主从同步更新是一个重要的任务,特别是在分布式系统或者高可用性架构中,确保数据的一致性和完整性至关重要。这个过程通常涉及到主数据库的写操作和从数据库的读操作,以及两者间的实时...

    深入学习Java同步机制中的底层实现

    Java同步机制是多线程编程中确保数据一致性与正确性的关键。在Java中,主要有两种同步机制:内置的`synchronized`关键字以及基于`java.util.concurrent`包中的高级同步工具类。本文将深入探讨这些机制的底层实现,...

    jdbc java mongodb mysql 相互同步

    本文将深入探讨如何使用Java的JDBC(Java Database Connectivity)接口与MongoDB、MySQL数据库进行数据交互,并实现相互之间的数据同步。 首先,我们需要理解JDBC,它是Java语言访问数据库的标准API,能够连接并...

    Java同步与异步.pdf

    Java同步与异步 Java同步与异步是Java编程中非常重要的概念,它们都是为了解决多线程环境中的线程安全问题。在多线程环境中,如果没有正确的同步机制,多个线程可能会同时访问共享资源,导致数据不一致和其他严重...

    java同步、异步相关知识点

    `synchronized`关键字是最常用的同步机制之一。它可以用来修饰方法或者代码块,确保同一时刻只有一个线程能够访问被修饰的资源。 - **修饰方法**:当`synchronized`用于修饰一个实例方法时,该锁的范围是整个对象;...

    java同步歌词功能

    Java同步歌词功能是一种在音乐播放器中常见的特性,它允许用户在欣赏音乐的同时,看到与当前播放时间对应的歌词。这项功能的实现主要依赖于Java编程语言以及对LRC(Lyric Repeat Character)格式的文本文件处理。LRC...

Global site tag (gtag.js) - Google Analytics