1. 线程是 比进程小的 执行单位
为了实现多线程 有两种方法, 继承 thread 类 或者 实现 runnable 接口
两种方式 都需要 把 run() 重写
用 start() 调用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果 是 使用 的 runnable 的方式, 就可以解决买票系统中 多个线程 处理 统一资源的问题(避免 的是 同号票的出现)
同步可以解决 资源共享 的安全问题 (解决的是 0号 和负数票的出现)同步代码块和 同步方法
public void run() {
while(true){
synchronized (this) {
if(ticket>0){
try{
Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖出第"+ticket--+"张票");
}else{
break;
}
}
}
}
++++++++++++++++++++++++++++++++++++++++++++
public synchronized void SaleTicket(){
if(ticket>0){
try{
Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖出第"+ticket--+"张票");
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++
2. 线程是 交互 运行的, 是相互的抢夺 CPU 的资源,
public class MyThread extends Thread {
int ticket=20;
public void run() {
System.out.println("我被调用了");
while(ticket>0){
System.out.println(Thread.currentThread().getName()+"卖出第" + ticket-- +"张票");
}
}
}
MyThread mt1=new MyThread();
mt1.start();
++++++++++++++++++++++++++++++++++++++++++++++++
3.然后就是 实现 的 runnable()接口
public class MyThread2 implements Runnable {
public void run() {
while(ticket>0){
System.out.println(Thread.currentThread().getName()+"卖出第"+ticket--+"张票");
}
}
}
MyThread2 myt1=new MyThread2();
Thread t1 = new Thread(myt1);
t1.start();