线程学习总结

1.首先需要熟悉一些基本概念:程序,进程,线程。(包含关系:进程里面包含线程;一个进程可以包含多个线程;没有线程的进程,可以看做是单线程的)

2.进程&线程

进程:资源分配的单位;(每个进程都是独立的,由3部分组成:CPU、Data

线程:调度和执行的单位

3.多进程&多线程

多进程:在操作系统中能同时运行多个任务;

多线程:在同一程序中有多个顺序流同时执行。

4.线程(Thread)

java.lang.Thread 

是lang包下的一个普通类,继承Object,实现Runnable这个接口:

public class Thread

extends Object

implements Runnable

(实现Runnable接口必须重写接口里面的run方法,Runnable中只有一个方法:run()).

5.注意:启动线程需要.start(),如果是.run(),就只是简单的方法调用。

6.重点:方法1,当类实现Runnable接口的时候,需要创建它的实现类Thread:例如:

<span style="font-size:18px;"><span style="font-size:18px;">public class ProgrammerAPP {</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">	public static void main(String[] args) {
		//创建真实角色
		Programmer programmer=new Programmer();
		//创建代理角色+真实角色引入
		<span style="color:#ff0000;">Thread thread=new Thread(programmer);
</span>		//用start开启线程
		<span style="color:#ff0000;">thread.start();
</span>		for (int i = 0; i < 500; i++) {
			System.out.println("一边聊天");
		}
	}
</span><pre class="html" name="code"><span style="font-size:18px;"> class Programmer <span style="color:#ff0000;">implements Runnable</span>{
	
	public void run() {
		for (int i = 0; i < 500; i++) {
			System.out.println("一边写代码。。。。。。。。");
		}
	}
    }</span></span>
}方法2:类直接继承Thread:
 
<span style="font-size:18px;"><span style="font-size:18px;">public class Zoo {

	public static void main(String[] args) {
		Rubbit rubbit=new Rubbit();
		Wugui wugui=new Wugui();
	   <span style="color:#ff0000;"> rubbit.start();
	    wugui.start();

</span>	}

}
class Rubbit <span style="color:#ff0000;">extends Thread</span>{

	@Override
	public void run() {
		for (int i = 0; i < 500; i++) {
			System.out.println("兔子^^跑了"+(i+1)+"步");
		}
	}
	
}
class Wugui <span style="color:#ff0000;">extends Thread</span>{

	@Override
	public void run() {
		for (int i = 0; i < 500; i++) {
			System.out.println("乌龟。。。跑了"+(i+1)+"步...........");
		}
	}
	
}</span></span>

7..join()方法:自己让出,先让别的线程执行。

<span style="font-size:18px;"><span style="font-size:18px;">public class JoinDemoOne extends Thread {

	public static void main(String[] args) throws InterruptedException {
		JoinDemoOne <span style="color:#ff0000;">joinDemo</span> = new JoinDemoOne();
		joinDemo.start();
		for (int i = 0; i < 100; i++) {
			System.out.println("main" + (i + 1));
			if (i == 49) {
				<span style="color:#ff0000;">joinDemo.join();
</span>			}
		}

	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("自己的方法:" + (i + 1));

		}
	}

}</span></span>

8..yield()方法:暂停当前正在执行的线程对象,并以同等机会执行其它线程(竞争里面包括自己这条线程,通俗来说,就是到它时它将自己停止,又重新分配(有可能分到自己))

9.子线程&主线程  获取线程名称的区别:

子线程:Thread thread=new Thread(Demo,"Girl");

             System.out.println(thread.getName());

主线程:System.out.println(Thread.currentThread().getName());(注意主线程里面的T是大写的)

10.经典抢票例题,注意while循环

<span style="font-size:18px;"><span style="font-size:18px;">public class Web12306 implements Runnable {
	private int num = 20;

	@Override
	public void run() {

		 <span style="color:#ff0000;">while(true){ </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">                 if(num<1){ break; </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">               } else{ </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">              try { Thread.sleep(1000); </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">               }
		  catch (InterruptedException e) { </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">		  e.printStackTrace(); </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">            } System.out.println(Thread.currentThread().getName()+"抢到了第"+(num--)+
		  "张票"); </span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">             }</span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="color:#ff0000;">         }
</span></span><pre class="html" name="code">     }</span>
<span style="font-size:18px;">}</span>
<span style="font-size:18px;">public class WebTest {

	public static void main(String[] args) throws InterruptedException {
	<span style="color:#ff0000;">Web12306 w=new Web12306();
</span>		
       Thread t1=new Thread(w, "张三");
       Thread t2=new Thread(w, "李四");
       Thread t3=new Thread(w, "王五");
       
       t1.start();
       t2.start();
       t3.start();
     }</span>
<span style="font-size:18px;">}
</span>

 

 

 

  

 

<span style="font-size:18px;"></span>


 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值