java多线层同时运行的解决,同步代码块synchronized

/*
多个线层同时操作一个数据
会导制数据超出
同步代码块
synchronized(对像)
{
需要同步的代码
}
*/

class Do7
{
    public static void main(String[] args)
    {
            Piao p1=new Piao();
            Thread t1=new Thread(p1);
            Thread t2=new Thread(p1);
            Thread t3=new Thread(p1);
            Thread t4=new Thread(p1);
            t1.start();t2.start();t3.start();t4.start();
    }
}

class Piao implements Runnable
{
    private  static int num=100;
    Object obj=new Object();//随便创建一个对象,用于synchronized(对像)
    public void run()
    {

        while(true)
        {
synchronized(obj)///同步代码块
    {
        if (num>0)
        {
            try{Thread.sleep(10);}catch(Exception e){}
            System.out.println(Thread.currentThread().getName()+"....."+num--);
        }
        else{
        return;}
}
        }
    }
}
时间: 2024-12-29 03:24:48

java多线层同时运行的解决,同步代码块synchronized的相关文章

彻底理解线程同步与同步代码块synchronized

1 public class Demo { 2 public static synchronized void fun1(){ 3 } 4 public synchronized void fun2(){ 5 } 6 public static void main(String args[]) throws Exception{ 7 synchronized(xxx) { 8 9 } 10 } 11 } 三种同步类型 虽然写法不同,但实际上,只有一种,就是[同步代码块].这是核心核心核心.同步方

JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this

JAVA之旅(十三)--线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this 我们继续上个篇幅接着讲线程的知识点 一.线程的安全性 当我们开启四个窗口(线程)把票陆陆续续的卖完了之后,我们要反思一下,这里面有没有安全隐患呢?在实际情况中,这种事情我们是必须要去考虑安全问题的,那我们模拟一下错误 package com.lgl.hellojava; import javax.security.auth.callback.TextInputCallback

Java并发学习之十四——使用Lock同步代码块

本文是学习网络上的文章时的总结,感谢大家无私的分享. Java提供另外的机制用来同步代码块.它比synchronized关键字更加强大.灵活.Lock 接口比synchronized关键字提供更多额外的功能.在使用Lock时需要注意的是要释放Lock锁. package chapter2; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 打印队列 */ pu

java 同步代码块与同步方法

同步代码块 synchronized (obj) { // 代码块 } obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定. 代码块中的代码是执行代码,即是某个方法中的某一部分代码,synchronized(obj){}只能出现在某个方法中.如: public void test() { synchronized (obj) { // 代码块 } } 而不能出现在其他位置,如下则报错: public class Test { public

java同步代码块

/** abc三个售票窗口,售50张票. 需求:可以做到同时销售,且不能卖重叠的,以及不能超过50 同步代码块 synchronized(对象){     同步代码块: } 对象如同锁,持有锁的线程可以在同步中执行 没有持有锁的线程即使获得CPU的执行器,也无法执行. 同步前提: 1.多线程的代码块才需要同步,即run里的代码才需要加同步.对共享数据加同步 2.必须是多个线程使用同一个锁,才需要同步 好处:提高多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源 */ class Tickt

java线程同步--同步代码块

package com.LearnJava.Thread; /* 同步代码块 synchronized(同步监视器){ //需要同步的代码 } 同步监视器:俗称 锁,可以是任何实例化的类.但是需要共用同一个实例. */ class WindowSell implements Runnable{ Object obj = new Object(); private int ticket = 100; @Override public void run() { while (true) { sync

线程的同步机制:同步代码块&同步方法

解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在线程安全问题: 打印车票时出现重票,错票 1.原因:由于一个线程在操作共享数据过程中,未执行完毕的情况下, 另外的线程参与进来了,导致共享数据存在了安全问题 2.解决想法:让一个线程操作共享数据完毕后,其他进程才有机会参与共享数据的使用 3.java的解决方案: 线程的同步机制 方式一:同步代码块

同步代码块

package tongbu.cn; /* * 多个线程同时操作同一资源,会引起卖出的票为负数,为了解决这个问题,就要使用同步 * 所谓同步,就是多个操作在同一时间段内 只能有一个线程进行 * 同步代码块的格式 * synchronized(同步对象){ * 需要同步的代码 * } */ //一个类实现runnable class TongBuDaiMa implements Runnable{ private int tiket = 5; public void run(){ for (int

java 多线程安全问题-同步代码块

/* 多线程的安全问题: while(true) { if(tick>0) { //线程0,1,2,3在余票为1时,都停滞在这里,之后分别获得CPU执行权,打印出0,-1,-2等错票 System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--); } } 问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行一部分,还没有执行完,停滞 另一个线程参与进来执行,导致共享数据