Java创建线程的方法及介绍

一、怎么创建线程

(1)、第一种创建线程的方法

线程是由一个类表示的,叫Thread,当new出来一个Thread就是创建了一个线程。

//创建一个线程
Thread thread = new Thread(){
	/**
	 * 此方法是编写执行线程时所需要执行的代码,是重写父类中的run()方法
	 */
	@Override
	public void run() {
		while (true) {
					
			try {
				//sleep(500)代表的是暂停线程多长时间之后在执行,里面的参数是毫秒单位
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//currentThread()代表的是当前线程,也就是当前对象
			//getName()代表的是当前线程的名称
			System.out.println(Thread.currentThread().getName());
			//this.getName()这个意思和上面的一样,但是不建议这样写,因为当线程多的时候这个this就不知道代表的是那个对象了
			//System.out.println(this.getName());
		}
	}
};
//运行线程
thread.start();

(2)、第二种创建线程的方法

这一种创建线程的方式是创建Runnable对象,创建这个对象时必须实现一个run()方法。

//第二种创建线程的方法,实现Runnable()方法,
	Thread thread2 = new Thread(new Runnable() {
			
		@Override
		public void run() {
			while (true) {
				try {
					//sleep(500)代表的是暂停线程多长时间之后在执行,里面的参数是毫秒单位
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				//currentThread()代表的是当前线程,也就是当前对象
				//getName()代表的是当前线程的名称
				System.out.println(Thread.currentThread().getName());
				//System.out.println(this.getName()); 这个时候就不能使用this方法了,因为使用this代表的就是Runnable()方法了 ,但Runnable不是一个线程所以不行
			}
				
		}
	});
	//打开第二个线程
	thread2.start();

(3)、第三种出现的问题:

//第三种方法
	//这里执行的是那个run方法,答案是Thread中的方法而不是Runnable中的,
	//因为当子类覆盖父类的run方法时,此时的run方法时子类的而不是父类的,而Runnable是在父类中的run方法中在没有对象的时候创建的,
	//当我们重写了父类方法之后就不会再去执行runable中的run方法了
	new Thread(
		new Runnable() {
			@Override
			public void run() {
				while (true) {
					try {
						//sleep(500)代表的是暂停线程多长时间之后在执行,里面的参数是毫秒单位
						Thread.sleep(500);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("Runnable  +"+Thread.currentThread().getName());
					}					
			}
		}
	){
		public void run() {
			while (true) {
				try {
					//sleep(500)代表的是暂停线程多长时间之后在执行,里面的参数是毫秒单位
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("Thread  +"+Thread.currentThread().getName());
			}				
		}
	}.start();

二、怎么实际运行线程

在Thread中有一个start()方法;这个方法就是运行此线程,当运行次线程的时候,就是在执行代码,这个代码就在Thread中的run()方法中编写。

通常我们都不会直接调用Thread方法,所以我们会使用子类继承Thread方法,然后用子类重写父类中的run()方法。

 

三、Thread和Runnable方法的区别?

Runnable方法更能体现面向对象的方式。

问题:

1、多线程机制会提高运行的效率吗?

答案是不会的,而且还会更慢,因为需要来回切换线程,所以会更慢。

有人说我多线程下载传输速度快,其实计算机并没有快,而是说抢了服务器的带宽,比如服务器会给每个服务提供20K那么10个线程服务器就会提供200K,所以不是机器快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Male晓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值