您的位置:首页 > 职场人生

黑马程序员——java 多线程复习笔记

2013-08-17 12:00 190 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

java多线程复习笔记

1、进程与线程

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

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

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

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

3、继承Thread

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

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

*继承Thread类实现多线程

class MyThread extends Thread
{
private String name;
public MyThread(String name)
{
this.name = name;
}
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(name + "运行,i" + i);
}
}
}
public class ThreadDemo
{
public static void main(String[] args)
{
MyThread mt1 = new MyThread("线程A ");
MyThread mt2 = new MyThread("线程B ");
mt1.start();
mt2.start();
}
}


——正确地启动线程要用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方法。

class MyThread implements Runnable
{
private String name;
public MyThread(String name)
{
this.name = name;
}
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(name + "运行,i" + i);
}
}
}
public class ThreadDemo
{
public static void main(String[] args)
{
MyThread my1 = new MyThread("线程A ");
MyThread my2 = new MyThread("线程B ");
Thread t1 = new Thread(my1);
Thread t2 = new Thread(my2)
t1.start();
t2.start();
}
}


4、同步与死锁

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

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

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

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

class MyThread implements Runnable
{
private String name;
public MyThread(String name)
{
this.name = name;
}
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(name + "运行,i" + i);
}
}
}
public class ThreadDemo
{
public static void main(String[] args)
{
MyThread my1 = new MyThread("线程A ");
MyThread my2 = new MyThread("线程B ");
Thread t1 = new Thread(my1);
Thread t2 = new Thread(my2)
t1.start();
t2.start();
}
}


——死锁

同步中嵌套同步

5、总结

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

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

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

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

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: