进程、线程、多线程、并发与并行、线程运行内存模型、锁
1.1我们为什么需要多线程?
比如我们在听歌时可以一边听一边下载,这种一个程序看起来同时做好几件事的情况,就需要多线程。
线程(Thread)和进程(Process)的关系很紧密,进程和线程是两个不同的概念,进程的范围大于线程。通俗地说,进程就是一个程序,线程是这个程序能够同时做的各件事情。比如,媒体播放机运行时就是一个进程,而媒体播放机同时做的下载文件和播放歌曲,就是两个线程。因此,可以说进程包含线程。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所有的全部资源。一个进程中是可以拥有很多线程的。
1.2实现多线程的方法
实现多线程有很多方法:Thread 继承 、Runnable 接口实现 、Callable 接口实现(带返回值) 、线程池(提供线程)。
我们要讲的就是其中的两种: Thread 继承 、Runnable 接口实现
1.2.1继承Thread 类开发多线程
我们可以用多线程来解决“程序看起来同时做好几件事情”的效果,只需要将各个文件传送的工作分别写在线程里即可。
继承 Thread 类实现多线程,该方法步骤如下:
一、编写一个类,继承 java.lang.Thread 类
二、在这个类中,重写 java.lang.Thread 类中的以下函数:
public void run()
class FileTransThread extends Thread{
private String fileName;
public FileTransThread(String fileName){
this.fileName = fileName;
}
public void run(){
System.out.println("传送" + fileName);
try{
Thread.sleep(1000 * 10);
}
catch(Exception ex){
}
System.out.println(fileName + "传送完毕");
}
}
线程编写完毕
三、实例化线程对象,调用其 **start()**函数来启动该线程。
FileTransThread ft1 = new FileTransThread(“文件 1”);
ft1.start();
1.2.2实现Runnable 接口开发多线程
该方法实现步骤如下:
一、编写一个类,实现 java.lang.Runnable 接口
二、在这个类中,重写 java.lang. Runnable 接口中的以下函数:
public void run()
将线程需要执行的代码放入run方法。
class FileTransRunnable implements Runnable{
private String fileName ;
public FileTransRunnable(String fileName){
this.fileName = fileName ;
}
public void run(){
System.out.println("传送" + fileName);
try{
Thread.sleep(1000 * 10);