多线程

本文介绍了Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口,并通过售票系统的实例展示了这两种方法的不同之处及其对资源共享的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:继承java. lang 包下的 Thread类,重写Thread类的run()方法;
public class Example{
public static void main(String []args) {
MyThread myThread=new MyThread();//多线程类的实例化
myThread.start();//开启线程
while(true) {
System.out.println("main()方法在进行");
}
}
}
class MyThread extends Thread{//MyThread类继承 多线程类Thread
public void run() {
while(true){
System.out.println("MyThread类的run()方法在运行");
}
}
}
.
.
方法二:实现java. lang . Runnable 接口。
/*通过继承Thread类实现多线程存在一定的局限性。因为Java中只支持单继承,为了克服它,Thread类提供了另一个
* 构造方法 Thread(Runnable target) ,其中Runnable是一个接口,只有一个run()方法,当通过Thread(Runnable target)
* 构造方法 创建线程对象时,只需为该方法传递一个实现了Runnable接口的实例对象即可 ,这样创建的线程将调用实现
* 了Runnable 接口中的run()方法作为运行代码,而不需要调用Thread类中的run方法*/
public class Example{
public static void main(String []args) {
MyThread myThread=new MyThread();
Thread thread =new Thread(myThread);//创建线程对象
thread.start();
while(true) {
System.out.println("main()方法在运行");
}
}
}
class MyThread implements Runnable{
public void run() {//线程的代码段,当调用star()方法时,线程从此处开始执行
while(true) {
System.out.println("Mythread类的run()方法在运行");
}
}
}
.
.
.
两种实现多线程方法的比较:
1)继承Thread的方法:其中四个进程 没有共享100张票 ,而是单独的占有100张票。
/*通过继承Thread类的方式实现多线程的实例:四个窗口卖车票*/
public class Example{
public static void main(String args[]) {
new TicketWindow() .start();//创建一个 线程对象 TicketWindow并开启。
new TicketWindow() .start();
new TicketWindow() .start();//创建一个 线程对象 TicketWindow并开启。
new TicketWindow( ).start();
}

}
class TicketWindow extends Thread{//继承多线程
private int tickets=100;
public void run() {
while(true) {
if(tickets>0) {
Thread th= Thread.currentThread();//获取当前进程
String th_name=th.getName();//获取进程的名字
System.out.println(th_name + "正在发售第:" + (tickets--)+"张票");
}
}
}
}

.
.
2)实现Runnable接口的方法:
代码中只创建了一个TicketWindow对象,然后创建了四个线程,在每个线程上都去调动这个TicketWindow对象中的run()方法,这样就可以确保四个进程访问的是同一个tickets变量。
public class Example{
public static void main(String []args) {
TicketWindow tw = new TicketWindow(); //创建 TicketWindow 实例对象 tw
new Thread( tw, "窗口1").start();//创建线程对象并命名为窗口1,开启线程
new Thread( tw, "窗口2").start();//创建线程对象并命名为窗口2,开启线程
new Thread( tw, "窗口3").start();//创建线程对象并命名为窗口3,开启线程
new Thread( tw, "窗口4").start();//创建线程对象并命名为窗口4,开启线程
}
}
class TicketWindow implements Runnable{
private int tickets=100;
public void run() {
while(true) {
if(tickets>0) {
Thread th = Thread.currentThread();//获取当前的进程
String th_name=th.getName();//获取当前进程的名字
System.out.println(th_name+"正在发售第"+(tickets--)+" 张票");
}
}
}
}

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿道学长啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值