1、多线程
代码:MyTicket2.java
class MyTicket implements Runnable
{
private int tick = 100;
Object obj = new Object();
public void run()
{
while(true)
{
//---------------------------------------同步代码块---------------------
synchronized(obj)
{
if(tick > 0)
{
try
{
Thread.sleep(10); //为什么要对它try? 让当前正在执行的线程休眠(暂停执行),可能会打印出0,-1,-2等错票
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName() + "...sale:" + tick--); //这里Thread.不能省,因为没有extends Thread吧!
}
}
/*
synchronized(对象)
{
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
*/
//-----------------------------------------------------------------------
}
}
}
class MyTicket2
{
public static void main(String[] args)
{
MyTicket t = new MyTicket();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
代码:MyBank.java
/*
两个人分别向银行存钱,每次存入100元,存3次
*/
class Bank
{
private int sum = 0;
Object obj = new Object();
public synchronized void add(int money)
{
//synchronized(obj)
//{
sum += money;
System.out.println(Thread.currentThread().getName() + "..." + sum);
//}
}
}
class Cus implements Runnable
{
Bank b = new Bank();
public void run()
{
for(int i = 0; i < 3; i++)
{
b.add(100);
}
}
}
class MyBank
{
public static void main(String[] args)
{
Cus c = new Cus();
Thread c1 = new Thread(c);
Thread c2 = new Thread(c);
c1.start();
c2.start();
}
}