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>