Java 线程学习

来源:互联网 发布:卓智网络 锐捷 拉萨 编辑:程序博客网 时间:2024/05/16 13:57

并行和并发

并行:指两个或多个事件在同一时刻点发生;

并发:指两个或多个事件在同一时间段内发生。

进程和线程

进程与线程的区别

进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,每一个进程至少有一个线程。

线程:堆空间是共享的,栈空间是独立的。线程消耗的资源比进程小。

多进程:操作系统中同时运行的多个程序。

多线程:一个进程同时运行多个任务。

线程调度

只有一个CPU时,在任意时刻只能执行一条计算机指令,每一个进程只有获得CPU的使用权才能执行指令。在可运行池中,会有多个线程处于就绪状态等待CPU.JVM负责了线程的调度。
JVM采用的是抢占式调度,没有采用分时调度。

多线程优势

1、线程可以共享堆内存

2、创建线程系统开销小

3、Java语言本身内置多线程功能的支持

严格来讲,多线程并不是提高了程序的运行效率,而是通过提高资源的使用效率来提高系统的效率。

Java操作进程

在java中如何运行一个进程

方式1:Runtime的exec方法。

方式2:ProcessBuilder的start方法。

例子:

//在java中简单获取一个进程/** * 需求 : 运行记事本程序 *  * 方式1 :Runtime类的exec方法 * 方式2 :ProcessBuilder的start方法 * */public class ProcessDemo {    public static void main(String[] args) throws IOException{        // 方式1 Runtime类的exec方法        Runtime runtime = Runtime.getRuntime();        runtime.exec("notepad");        // 方式2 ProcessBuilder的start方法        ProcessBuilder bp = new ProcessBuilder("notepad");        bp.start();    }}

创建并启动线程

线程常考面试题

1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?

有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口。

    new Thread(){    public void run(){    }    }.start();
    new Thread(new Runnable(){            public void run(){            }        }    ).start();
## 2、sleep() 和 wait()区别 ##sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep **不会释放对象锁**。 wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程**放弃对象锁**,进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。## 单例模式 ##
    //单例模式- 饿汉式    class ArrayUtil {        private static final ArrayUtil instance = new ArrayUtil();        private ArrayUtil() {        }        public static ArrayUtil getInstance() {            return instance;        }        public void work() {            System.out.println("工作");        }    }
    //单例模式- 懒汉式    class ArrayUtil2{        private static ArrayUtil2 instance =  null;        public static  ArrayUtil2 getInstance(){            if(instance == null){                instance = new ArrayUtil2();            }            return instance;        }        public void work(){            System.out.println("工作");           }           }

原创粉丝点击