线程之线程同步(1)

线程同步: 当多个线程访问同一个数据资源时,会造成数据的不正确 。则,当同时访问时必须确定一个线程访问,其他线程暂不可访问
       在Java中 提出了对象互锁斥 使用synchronized 表示该线程被锁住,只能被当前线程访问,其他线程等待,暂不可访问

实例:

package com.exmaple.Thread;

public class Test5 extends Thread{

private static Runnab r;
/**
* 线程同步 当多个线程访问同一个数据资源时,会造成数据的不正确
* 则,当同时访问时必须确定一个线程访问,其他线程暂不可访问
* 在Java中 提出了对象互锁斥 使用synchronized 表示该线程被锁住,只能
* 被当前线程访问,其他线程等待,暂不可访问
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
r=new Runnab();

//创建两个线程, 设置线程名,并开启
Test5 t=new Test5();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.setName("name1");
t2.setName("name2");
t1.start();
t2.start();
}

//主方法实现接口,通过调用方法,拿到线程的name,从而可以得到不同的值
@Override
public void run() {
// TODO Auto-generated method stub
r.add(Thread.currentThread().getName()) ;
}
}
class Runnab {
int num=0;

//若没有synchronized,线程t1执行,num=1,线程t1睡眠;线程t2执行,num=2,线程t2休眠;t1执行打印 2,t2执行打印 2

//有synchronized  线程t1执行,线程2等待;线程t1执行完 num=1  线程t2开始执行 num=2
public synchronized void add(String name){
num++;
try{
Thread.sleep(1);
}catch (Exception e){

}
System.out.println("第"+num+"ge");
}
}

时间: 2024-09-14 06:13:42

线程之线程同步(1)的相关文章

基础学习day11--多线程一线程的创建,运行,同步和锁

1.1.进程和线程 进程:一个应用程序一般都是一个进程,正在进行的程序 每一个进程最少都有一个线程,都有一个执行顺序,该顺序是一个执行路径或者一个控制单元 线程:进程中一个独立的控制单元,线程控制着进程的执行. windows中的任务管理器,可以查看进程,linux下通过ps命令 线程是进程的最小单位 线程依赖于进程 线程随着进程的创建和创建,随着进程的结束而消亡 如迅雷:可以同时开启多个下载,就是多线程 多个程序同时执行,时CPU在很快的切换,看上去是同时执行,实际上是在CPU在切换执行. 多

Java线程:线程的同步与锁

一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public class Foo {     private int x = 100; public int getX() {         return x;     } public int fix(int y) {         x = x - y;         return x;     } }

线程:Exchanger同步工具

可以在对中对元素进行配对和交换的线程的同步点,类似于交易,A拿着钱到达指定地点,B拿着物品到达指定地点,相互交换,然后各自忙各自的事去了. 1 package ch03; 2 3 import java.util.concurrent.Exchanger; 4 5 public class ExchangerTest { 6 7 public static void main(String[] args) { 8 final Exchanger<String> changer = new Ex

线程:CountDownLatch同步工具

一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 类似计数器,当计数器的值为0时,继续往下执行. 1 package ch03; 2 3 import java.util.Random; 4 import java.util.concurrent.CountDownLatch; 5 import java.util.concurrent.ExecutorService; 6 import java.util.concurrent.Executors; 7 8

线程互斥与同步

能解决下面的问题,基本上就能理解线程互斥与同步了. 子线程循环10次,主线程循环100次,接着子线程循环10,主线程循环100次.如此往复循环50次. 1 package cn.lah.thread; 2 3 public class TraditionalThreadCommunication { 4 5 public static void main(String[] args) { 6 7 final Business business = new Business(); 8 new Th

C# 线程之间的同步

1.通过Join方法,暂停当前线程 Thread secondThread = new Thread(new ThreadStart(ThreadMethod)); secondThread.Start(); ... secondThread.Join(); 2.通过启动APM异步操作的方法,得到一个IAsyncResult对象,通过它有三种方法使得两个线程同步. public interface IAsynResult { object AsyncState{get; } WaitHandle

Linux互斥与同步应用(一):posix线程及线程间互斥

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途] 有了进程的概念,为何还要使用线程呢? 首先,回忆一下上一个系列我们讲到的IPC,各个进程之间具有独立的内存空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便.而同一个进程下的线程是共享全局内存的,所以一个线程的数据可以在另一个线程中直接使用,及快捷又方便. 其次,在Linux系统下,启动一个新的进程必须分配给它独立的地

python-多线程2-线程同步

线程同步: 一个场景: 一个列表里所有元素都是0,线程A从后向前把所有元素改成1,而线程B负责从前往后读取列表并打印. 那么,可能线程A开始改的时候,线程B便来打印列表了,输出就变成一半0一半1,这就是数据的不同步 线程同步就是为了防止这个,同时也引入了锁的概念.Lock和Rlock可以实现线程同步.这两个对象都有 acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间. 你可以理解为这两个方法之间的东西会被锁定.

线程--promise furture 同步

http://www.cnblogs.com/haippy/p/3279565.html std::promise 类介绍 promise 对象可以保存某一类型 T 的值,该值可被 future 对象读取(可能在另外一个线程中),因此 promise 也提供了一种线程同步的手段.在 promise 对象构造时可以和一个共享状态(通常是std::future)相关联,并可以在相关联的共享状态(std::future)上保存一个类型为 T 的值. 可以通过 get_future 来获取与该 prom

线程:CyclicBarrier同步工具类

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点.比如公司组织活动出去玩,需要在公司门口一起搭车去.每个人从家里出发去公司门口,到达的时间肯定先后不一样,所以公司的车要一直等待,等所有人到齐后,才开车出发.CyclicBarrier就类似这样的功能,当所有线程到达"屏蔽点"的时候,才往下走. 具体等待多少根线程到达,可以在构造方法里指定CyclicBarrier(int parties). 当你的parties设为3的时候,假设只有2根线程到达此处,那程序会一直在此等待.