标签:top 一起 new t 两种 相同 多个 访问 创建 设置
一、线程和进程
进程可以看成是一个运行中的程序,每个应用就是一个运行的程序,可以看成是一个进程。操作系统会为每个进程分配内存空间和CPU时间等。多任务支持了多进程。
线程成为轻量级的进程,有自己的运行环境。线程存在于进程中,每个进程最少有一个线程,线程分享进程的资源。例如程序中同时进行数据读取和数据处理,这样能够提高效率,这时候就需要两个线程。
二、java中的多线程实现的方式
java中提供了两种实现线程的方式:
1、继承Thread类实现线程类,需要覆盖run方法
public class MyThread extends Thread{
public void run(){
//定义线程要执行的代码
}
}
2、通过线程类创建线程对象:
Thread t=new MyThread();
Thread t=new MyThread("线程的名字");
3、线程的启动通过start方法实现
看下面这个例子1:
这个结果就是,main主线程开始,然后进行其他的线程,主线程结束,由于系统分配着进行时间,所以两个线程穿插交替进行,可以运行一下体验一下,如图下面:
- 通过实现Runable接口实现多线程
1、需要实现run方法
public class MyThread2 implements Runable{
public void run(){
//定义线程要执行的代码
}
}
2、创建线程对象:
Thread tt=new MyThread(new MyThread2());
3、线程的启动通过start方法实现
看下面的例子2。
三、线程的名字
class MyThread extends Thread{
public MyThread(String name){
super(name);
}
......
}
MyRunnable r=new MyRunnable();
Thread t3=new Thread(r,"线程3");
- 通过Thread对象的setName方法设置
- 调用getName方法得到线程的名字
- 例子6.3线程名字的使用
四、线程的优先级
- 默认情况下,一个程序的多个线程具有相同的优先级,也就是获得CPU的概率相同。可以通过设置线程的优先级来调整每个线程获得CPU的机会大小。
- 调用线程的setPriority方法设置优先级,参数表示优先级。优先级的最小值是1,最大的值是9,默认值是5。
- 需要设置优先级的情况比较少。
- 例子(6.4)线程的优先级
五、让线程等待
根据需要可以让线程等待一段时间再执行,可以通过4种方式:
- 使用sleep让线程等待一段时间
- 使用yield方法让线程让出执行机会
- 使用join让线程等待
- wait方法与notity一起使用,在后面单独介绍,这里介绍3个
例子6.8——输出结果0
例子6.9——输出结果5
六、实例:实现人能够同时说话和开车
七、资源同步
多线程的问题
...
int tickets = getTicket(); (1)
setTickets(tickets-1); (2)
...
假设A线程和B线程分别表示两个售票窗口,可能的执行过程如下:
A线程执行(1),B线程执行(1),A线程执行(2),B线程执行(2),
资源同步可以使用关键词synchronized,相当于对资源加锁,加锁之后其他代码就不能访问了,只有等当前代码执行完之后并解锁,其他的代码才能访问。synchronized可以用在对象上,也可以用在方法上,也可以用在一段代码上。
例子:
6.11在对象上加锁
6.12在方法上加锁
八、wait和notify
某个线程在执行的过程中发现需要的资源不可用的时候,就需要等待,调用资源的wait方法,让当前线程处于等待状态。
处于等待状态的线程自己不能继续执行,必须等待其它线程唤醒它,其他线程通过notify或者notifyAll方法来唤醒。
Producer.java
这个项目Java文件已加载为附件
多线程——讲的不错,认认真真做的笔记,认真再看!
标签:top 一起 new t 两种 相同 多个 访问 创建 设置
原文地址:http://www.cnblogs.com/jichui/p/7780793.html