多线程(Multithreading)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334150/article/details/79704906

      多线程实现有俩种方法(仅限于我这个初学多线程的娃):

                                                                                            ①继承自Thread类的类对象; 

                                                                                           ②实现于Runnable接口的类对象。


      二者的区别是:Thread:   一个Mythread(继承他的类对象)代表一个线程,故Mythread里面的资源不可共享;

                                Runnable: Thread修饰MyRunnable,一个Thread代表一个线程,故同一个MyRunnable里面的资源可共享。


public class RunnableandThreadDemo {
	public static void main(String[] args) {
		System.out.println("                   我们先使用继承Tread类的三个MyThread对象线程运行。\n\n");
		saleticketsTread();

		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("\n                               现在主线程休眠二秒... ...\n");

		System.out.println("\n现在采用实现Runnable接口的MyRunnable(Thread修饰)的三个接口(共享一个MyRunnable对象,从而实现了资源共享)....\n");
		saleticketsRunnable();
	}

	public static void saleticketsTread() {
		Mythread my1 = new Mythread("1号Tread类型窗口");
		Mythread my2 = new Mythread("2号Tread类型窗口");
		Mythread my3 = new Mythread("3号Tread类型窗口");
		my1.start();
		my2.start();
		my3.start();
	}

	public static void saleticketsRunnable() {
		MyRunnable my = new MyRunnable(); // 实例化MyRunnale(Runnale接口)再用Thread装饰
		MyRunnable my2 = new MyRunnable();
		Thread thr1 = new Thread(my, "Thread装饰的Runnale壹号窗口");
		Thread thr2 = new Thread(my, "Thread装饰的Runnale二号窗口");
		Thread thr3 = new Thread(my, "Thread装饰的Runnale三号窗口");
		thr1.start();
		thr2.start();
		thr3.start();
	}

}

/**一个Mythread代表一个线程,故Mythread里面的资源不可共享**/
class Mythread extends Thread { // Mythread继承Thread类,覆写Run方法,不共享资源
	private int tickets = 3;
	private String windowname; // 需要自己写赋予线程名字

	public Mythread(String windowname) {
		super();
		this.windowname = windowname;
	}

	public void run() {
		for (int i = 0; i < 4; i++) {
			if (tickets > 0) {
				System.out.println(windowname + "正在卖第" + tickets-- + "张票");
			}
		}
	}

}

/**Thread修饰MyRunnable,一个Thread代表一个线程,故同一个MyRunnable里面的资源可共享**/
class MyRunnable implements Runnable {
	private int tickets = 3;

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i = 0; i < 4; i++) {
			if (tickets > 0) {
				System.out.println(Thread.currentThread().getName() + "正在卖第" + tickets-- + "张票");
			}
		}

	}

}

下附线程常用的方法:  Thread.currentThead()  ->当前线程可加上 ".getname()"等方法。    (th为Thread的对象)  th.isAlive() ——>判断线程是否死亡。   Thread.sleep(ms)。   th.join()强制运行     th.ionterrupt()强制中断  th.stePriority(x)  x= (1,10)设置优先值 。。。可能不尽如人意。。。     th.yied() 暂时礼让,稍后恢复。

猜你喜欢

转载自blog.csdn.net/qq_37334150/article/details/79704906