飞猫xxx

导航

 

 

java多线程复习笔记

1、进程与线程

进程:是一个正在执行中的程序。
每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。

线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。

一个进程中至少有一个线程。

2、java中实现多线程有两种手段,一种是继承Thread,另一种是实现Runnable接口。

3、继承Thread

创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
目的:将自定义代码存储在run方法。让线程运行。

3,调用线程的start方法,
该方法两个作用:启动线程,调用run方法。

*继承Thread类实现多线程

 1 class MyThread extends Thread
 2 {
 3     private String name;
 4     public MyThread(String name)
 5     {
 6         this.name = name;
 7     }
 8     public void run()
 9     {
10         for(int i=0;i<10;i++)
11         {    
12             System.out.println(name + "运行,i" + i);
13         }
14     }
15 }
16 public class ThreadDemo
17 {
18     public static void main(String[] args)
19     {
20         MyThread mt1 = new MyThread("线程A ");
21         MyThread mt2 = new MyThread("线程B ");
22         mt1.start();
23         mt2.start();
24     }
25 }

 

——正确地启动线程要用start()方法,不能用run()直接调用方法

*实现Runnable接口

创建线程的第二种方式:实现Runable接口

步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
将线程要运行的代码存放在该run方法中。

3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
为什么要将Runnable接口的子类对象传递给Thread的构造函数。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。

5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

 1 class MyThread implements Runnable
 2 {
 3     private String name;
 4     public MyThread(String name)
 5     {
 6         this.name = name;
 7     }
 8     public void run()
 9     {
10         for(int i=0;i<10;i++)
11         {    
12             System.out.println(name + "运行,i" + i);
13         }
14     }
15 }
16 public class ThreadDemo
17 {
18     public static void main(String[] args)
19     {
20         MyThread my1 = new MyThread("线程A ");
21         MyThread my2 = new MyThread("线程B ");
22         Thread t1 = new Thread(my1);
23         Thread t2 = new Thread(my2)
24         t1.start();
25         t2.start();
26     }
27 }

4、同步与死锁

——同步是指多个操作在同一个时间段内只能有一个线程进行,其他进程要等待此线程完成之后才可以继续执行。

——解决资源共享恶同步操作,可以使用同步代码块和同步方法两种方式完成

——同步代码块必须制定一个需要同步的对象,但一般都将当前对象(this)设置成同步对象。

*使用同步代码块解决同步问题

 1 class MyThread implements Runnable
 2 {
 3     private String name;
 4     public MyThread(String name)
 5     {
 6         this.name = name;
 7     }
 8     public void run()
 9     {
10         for(int i=0;i<10;i++)
11         {    
12             System.out.println(name + "运行,i" + i);
13         }
14     }
15 }
16 public class ThreadDemo
17 {
18     public static void main(String[] args)
19     {
20         MyThread my1 = new MyThread("线程A ");
21         MyThread my2 = new MyThread("线程B ");
22         Thread t1 = new Thread(my1);
23         Thread t2 = new Thread(my2)
24         t1.start();
25         t2.start();
26     }
27 }

 ——死锁

同步中嵌套同步

5、总结

(1)线程是指程序的运行流程,多线程机制可以同时运行多个程序块,使程序运行效率更高。

(2)run()方法是定义在Thread类中的一种方法,因此把线程的程序代码编写在run()方法内所做的就是覆写的操作。

(3)Runnable接口中声明了抽象的run()的方法,因此必须在实现Runnable接口的类中明确定义run()方法。

(4)在每一个线程创建和消亡之前,均会处于创建、就绪、运行、阻塞、终止状态之一

 

posted on 2013-08-17 12:00  飞猫xxx  阅读(262)  评论(0)    收藏  举报