不会吧!不会还不会多个线程创建吧!
各位观众老爷 点赞投币一键三联 坏了 搞错了! 关注收藏
^ 根据韩顺平老师做笔记
继承Thread VS Runnable 区别
1、从java的设计来看 通过继承Thread或者实现Runnable接口创建线程本质上都没有区别 从jdk文档中可以看到Thread类本身就实现的Runnable接口的Start()
2、实现Runnable接口方式更加适合多个线程共享一个资源的情况并且避免了单继承的限制
建议使用Runnable接口的使用
package com.company.duoxiancheng.review;
public class Thread03 {
public static void main(String[] args) {
//main线程启动两个子线程、
T1 t1 = new T1();
T2 t2 = new T2();
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread2.start();
}
}
class T1 implements Runnable{
int count = 0;
@Override
public void run() {
while (true){
System.out.println("hello,world"+(++count));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (count==5){
break;
}
}
}
}
class T2 implements Runnable{
int count = 0;
@Override
public void run() {
while (true){
System.out.println("hi"+(++count));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (count ==5){
break;
}
}
}
}
使用多线程模拟三个窗口同时售票
解法一(但是会出现问题)
package com.company.duoxiancheng.review;
public class SellTicket {
public static void main(String[] args) {
sellticket1 sellticket11 = new sellticket1();
sellticket1 sellticket1 = new sellticket1();
sellticket1 sellticket12=new sellticket1();
Thread thread1= new Thread(sellticket1);
Thread thread2= new Thread(sellticket11);
Thread thread3= new Thread(sellticket12);
thread1.start();
thread2.start();
thread3.start();
}
}
class sellticket1 implements Runnable{
private static int ticketNum = 100;
@Override
public void run() {
while (true){
if (ticketNum <=0){
System.out.println("票已销售完毕");
break;
}
//休眠50ms
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口"+Thread.currentThread().getName()+"售出一张票" +(--ticketNum));
}
}
}
结果出现问题
问题原因 判断问题 的时候会休眠 导致
下面文件会解决超卖问题
;
}
}
}
结果出现问题
[外链图片转存中...(img-oEHRnoRX-1627731416854)]
问题原因 判断问题 的时候会休眠 导致
下面文件会解决超卖问题