方法一:继承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--)+" 张票");
}
}
}
}