java多线程------synchronized方法,块

    xiaoxiao2021-03-25  132

    package test.threaddemo; import com.sun.javafx.collections.annotations.ReturnsUnmodifiableCollection; import javax.xml.bind.PrintConversionEvent; import java.util.concurrent.locks.Lock; public class ThreadDemo3 { public static void main(String[] args) { Ticket ticket = new Ticket(); MaiPiao1 t1 = new MaiPiao1("A", ticket); MaiPiao1 t2 = new MaiPiao1("B", ticket); MaiPiao1 t3 = new MaiPiao1("C", ticket); t1.start(); t2.start(); t3.start(); } } class MaiPiao1 extends Thread { String name; Ticket ticket; public MaiPiao1(String name, Ticket ticket) { this.name = name; this.ticket = ticket; } public void run() { while (true) { int no = ticket.getTicket(); if (no != 0) { System.out.println(name + ":" + ticket.getTicket()); } else { return; } } } } /** * 买票synchronized方法 */ class Ticket { private int ticket = 100; public synchronized int getTicket() { if (ticket <= 0) { return 0; } int tmp = ticket; ticket = ticket-1; return tmp; } }

    synchronized块 package test.threaddemo; import javax.xml.bind.PrintConversionEvent; import java.util.concurrent.locks.Lock; public class ThreadDemo2 { public static void main(String[] args) { MaiPiao t1 = new MaiPiao("A"); MaiPiao t2 = new MaiPiao("B"); MaiPiao t3 = new MaiPiao("C"); t1.start(); t2.start(); t3.start(); } } /** * 买票synchronized块 */ class MaiPiao extends Thread { private String name; public static int ticket = 10; public MaiPiao(String name) { this.name = name; } private static Object lock = new Object(); public void run() { while (true) { synchronized (lock) { if(ticket <=0){ return; } int tmp = ticket; try { Thread.sleep(tmp); } catch (InterruptedException e) { e.printStackTrace(); } ticket = tmp - 1; System.out.println(name + ":" + tmp); } yield();//线程让步 } } }

    转载请注明原文地址: https://ju.6miu.com/read-20092.html

    最新回复(0)