多线程的两种实现
//=================多线程==================== public class Wwww { public static void main(String[] args) { // TODO Auto-generated method stub //************************************************ //方法1 MyThread myThread=new MyThread(); myThread.start();//start方法用于启动新线程,线程启动后,系统自动调用run方法 //方法2 MyThread1 myThread1=new MyThread1(); Thread thread=new Thread(myThread1);//创建线程对象 thread.start();//开启线程 // while(true) { System.out.println("main()方法正在运行"); } } } class MyThread extends Thread {//方法一: 继承java.lang包下的Thread类,重写run()方法 //在run()方法中实现运行在线程上的代码 。使两个while打印语句可以并发执行 public void run() { while(true) { System.out.println("MyThread类的run()方法在运行"); } } } //方法二:实现runnable接口创建多线程 class MyThread1 implements Runnable{ public void run() { while(true) { System.out.println("MyThread1类的run()方法在运行"); } } }
public class Wwww {
public static void main(String[] args) {
// TODO Auto-generated method stub
new TicketWindow().start();
new TicketWindow().start();
new TicketWindow().start();
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--+"张票");
}
}
}
}
public class Wwww {
public static void main(String[] args) {
// TODO Auto-generated method stub
TicketWindow tw=new TicketWindow();//创建实例对象tw
new Thread(tw,"窗口1").start();//创建线程对象并命名为窗口1
new Thread(tw,"窗口2").start();
new Thread(tw,"窗口3").start();
new Thread(tw,"窗口4").start();
}
}
//只创建了一个对象,创建了四个线程,每个线程上都去调用这个对象的run()方法,这样可以确保四个线程访问的都是同一个tickets变量
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--+"张票");
}
}
}
}