多线程就不说了,很好理解,同步就要说一下了。同步,指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。所以同步的关键是多个线程对象竞争同一个共享资源。
同步分为外同步和内同步。外同步就是在外部创建共享资源,然后传递到线程中。代码如下:
  1. class MyThread implements java.lang.Runnable {
  2. private int threadId;
  3. private Object obj;
  4. public MyThread(int id, Object obj) {
  5. this.threadId = id;
  6. this.obj = obj;
  7. }
  8. @Override
  9. public void run() {
  10. synchronized (obj) {//实现obj同步
  11. for (int i = 0; i < 100; ++i) {
  12. System.out.println("Thread ID: " + this.threadId + " : " + i);
  13. }
  14. }
  15. }
  16. }
  17. public class TestThread {
  18. public static void main(String[] args) throws InterruptedException {
  19. Object obj = new Object();
  20. for (int i = 0; i < 10; ++i) {
  21. new Thread(new MyThread(i, obj)).start();//obj为外部共享资源
  22. }
  23. }
  24. }

内同步,就是在线程内部创建对象,然后实现同步。因为类成员变量可以被类的所有实例共享,所有可以利用这一特性实现:

代码如下:
  1. class MyThread implements java.lang.Runnable {
  2. private int threadId;
  3. private static Object obj = new Object();
  4. public MyThread(int id) {
  5. this.threadId = id;
  6. }
  7. @Override
  8. public void run() {
  9. synchronized (obj) {
  10. for (int i = 0; i < 100; ++i) {
  11. System.out.println("Thread ID: " + this.threadId + " : " + i);
  12. }
  13. }
  14. }
  15. }
  16. public class TestThread {
  17. public static void main(String[] args) throws InterruptedException {
  18. for (int i = 0; i < 10; ++i) {
  19. new Thread(new MyThread(i)).start();
  20. }
  21. }
  22. }

160407、java实现多线程同步的更多相关文章

  1. Java中多线程同步类 CountDownLatch

    在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java提供了一个多线程同步辅助类,可以完成此类需求: 类中常见的方法: 其中构造方法:CountDownLatch(int count) ...

  2. 【53】java的多线程同步剖析

    synchronized关键字介绍: synchronized锁定的是对象,这个很重要 例子: class Sync { public synchronized void test() { Syste ...

  3. Java自学-多线程 同步synchronized

    Java 多线程同步 synchronized 多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问题 多线程的问题,又叫Concurrency 问题 步骤 1 : 演示同步问题 假设盖 ...

  4. Java之多线程同步基础

    java学习的道路上呢总有一些麻烦的东西需要花费一些时间去理解,比如个人认为不好搞的多线程. 线程是并列运行的 因为是并列运行,所以有时候会发生资源抢占,从而导致参数变化; 比如酱紫 package ...

  5. [Java][Android] 多线程同步-主线程等待全部子线程完毕案例

    有时候我们会遇到这种问题:做一个大的事情能够被分解为做一系列相似的小的事情,而小的事情无非就是參数上有可能不同样而已! 此时,假设不使用线程,我们势必会浪费许多的时间来完毕整个大的事情.而使用线程的话 ...

  6. 【java】多线程同步生产者消费者问题

    package 多线程; class Producer implements Runnable{ private Data data; public Producer(Data data){ this ...

  7. 【java】多线程同步死锁

    package 多线程; class A{ public synchronized void say(B b){ System.out.println("A说:你把你的本给我,我把我的笔给你 ...

  8. Java Thread 多线程同步、锁、通信

    参看:http://www.cnblogs.com/hoojo/archive/2011/05/05/2038101.html

  9. java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

    本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...

随机推荐

  1. HttpOperater

    using System; using System.IO; using System.Linq; using System.Net; using System.Text; using System. ...

  2. 深入浅出ObjC之消息 (转)

    在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC 中的方法调用(ObjC中的术语为消息)跟其他语言中的方法调用差不多,只是形式有些不同而已. 譬如 ...

  3. 改善用户体验,用图片的自身变化以及进度通知摆脱传统的进度条,okhttp,Canvas,Paint实现

    转载请注明出处:王亟亟的大牛之路 从最開始的白页面等待,到后来的进度条告知用户.到如今的WebBO/微信这样的先下缩略图点击才又一次下大图的方式,我们开发人员对用户感知的注意度越来越高.昨天刷微博的时 ...

  4. CA证书的信认

    为什么不同的品牌证书,价钱不一样: 衡量证书一般是看通用型,就是大家认不认你,或者说,你买的证书的根证书有没有被设备内置,内置了,你就是可信的, 没内置,就没法用.

  5. Struts2初学 struts.xml详解 一

    一.简介    Struts 2是一个MVC框架,以WebWork设计思想为核心,吸收了Struts 1的部分优点 二.详解    首先让我们看一下一个简单的struts.xml文件的结构  < ...

  6. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  7. ldap temp

    #http://www.openldap.org/software/man.cgi?query=slapcat&apropos=0&sektion=0&manpath=Open ...

  8. phpstrom直接运行和调试php

    最近想学服务器开发,但是没找到免费的虚拟主机,好在有一大把的php主机, 于是决定学php了,但并不准备学网页制作,只是把php作为服务器逻辑处理语言. 下载xampp,打开phpstrom的设置界面 ...

  9. GuozhongCrawler看准网爬虫动态切换IP漫爬虫

    有些关于URL去重的方面代码没有提供,须要自己去实现.主要这里提供思路 项目地址:http://git.oschina.net/woshidaniu/GuozhongCrawler/tree/mast ...

  10. C#中利用JQuery实现视频网站的缩略图采集

    最近有朋友想要采集优酷的视频标题和缩略图 (哈哈, 并非商业目的). 找到我帮忙, 考虑到有我刚刚发布的SpiderStudio, 我毫不犹豫的答应了. 首先在网页上视频的基本结构为: div.v - ...