8
C
9
public class TestMyThread {
public static void main(String[] args) {
Thread t1 = new Thread(new MyThread1());
Thread t2 = new MyThread2();
t1.start();
t2.start();
}
}
class MyThread1 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("hello");
}
}
}
class MyThread2 extends Thread {
@Override
public void run () {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("world");
}
}
}
案例
public class TestProductCustomer {
public static void main(String[] args) {
Shop shop = new Shop();
Thread p = new Thread(new Product(shop),"生产者");
Thread c = new Thread(new Customer(shop),"消费者1");
Thread c1 = new Thread(new Customer(shop),"消费者2");
p.start();
c.start();
c1.start();
}
}
class Goods{
private int id;
public Goods(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class Shop{
Goods goods;
boolean flag;
public synchronized void saveGoods(Goods goods) throws InterruptedException {
if(flag) {
System.out.println(Thread.currentThread().getName()+":商品充足!要等待了!");
this.wait();
}
System.out.println(Thread.currentThread().getName()+"生产并在商场里存放了"+goods.getId()+"件商品");
this.goods = goods;
flag = true;
}
public synchronized void buyGoods() throws InterruptedException {
if(!flag) {
System.out.println(Thread.currentThread().getName() +":商品不充足!要等待了!");
this.wait();
}
System.out.println(Thread.currentThread().getName()+"购买了"+ this.goods.getId()+"件商品");
this.goods = null;
flag =false;
this.notifyAll();
}
}
class Product implements Runnable{
Shop shop;
public Product(Shop shop) {
this.shop = shop;
}
public void run() {
for(int i = 1;i<=60;i++) {
try {
this.shop.saveGoods(new Goods(i));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Customer implements Runnable{
Shop shop;
public Customer(Shop shop) {
this.shop = shop;
}
public void run() {
for(int i =1;i<=30;i++) {
try {
this.shop.buyGoods();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package day3_12;
public class TestCode {
public static void main(String[] args) {
LeftChopstick left = new LeftChopstick();
RightChopstick right = new RightChopstick();
Thread boy = new Thread(new Boy(left,right));
Thread girl = new Thread(new Girl(left,right));
boy.start();
girl.start();
}
}
class LeftChopstick{
String name = "左筷子";
}
class RightChopstick{
String name = "右筷子";
}
class Boy implements Runnable{
LeftChopstick left;
RightChopstick right;
public Boy(LeftChopstick left,RightChopstick right) {
this.left =left;
this.right = right;
}
public void run() {
System.out.println("男孩要拿筷子!");
synchronized(left) {
try {
left.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("男孩拿到了左筷子,开始拿右筷子");
}
synchronized(right){
System.out.println("男孩拿到了右筷子,开始吃饭");
}
}
}
class Girl implements Runnable{
LeftChopstick left;
RightChopstick right;
public Girl(LeftChopstick left,RightChopstick right) {
this.left =left;
this.right = right;
}
public void run() {
System.out.println("女孩要拿筷子!");
synchronized(right) {
System.out.println("女孩拿到了右筷子,开始拿左筷子");
}
synchronized(left){
System.out.println("女孩拿到了左筷子,开始吃饭");
left.notify();
}
}
}
笔记

