您的位置:首页 > 编程语言 > Java开发

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

2017-03-10 13:36 423 查看
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();//线程让步
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thread 线程
相关文章推荐