Java 线程学习

并行和并发

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

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

进程和线程

进程与线程的区别

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

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

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

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

线程调度

只有一个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("工作");   
        }       
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值