线程、进程、程序区别及联系
程序:一段静止的代码
进程:正在执行的程序,进程是操作系统进行资源分配的最小单位。
线程:进程进一步细化成线程,是进程内部的最小执行单位,是操作系统进行任务调度的最小单位,线程隶属于进程
上面三个的具体应用:
在上面的三大件中,我们的程序文件就存储在硬盘中,当我们运行某个app(如qq程序),这时就由操作系统将qq进程调入内存中,当然一个进程会有多个线程,哪些线程需要进入cpu执行,也需要操作系统进行调度。
java中创建线程
注:main方法启动主线程
创建线程方式一:创建的类继承java.long包中的thread类
同时重写run方法;
创建好我们自定义的线程类后,我们就可以创建线程了,注意,多次方法的调用并不是多线程,只是一个线程的多个任务;
创建线程方法应该如下:创建我们自定义对象的实例后,调用start方法,在main主线程中启动一个新的线程。
创建线程方式二:创建的类实现Runable接口,重写run方法,作为任务类。
这个类可以成为线程任务类,这个类并不能直接创建线程,而是通过Thread类的构造方法创建Thread类的对象,这个类只是用来在run方法中提供任务。
通过Thread类的构造方法创建Thread类的对象:
二者区别:
继承thread类:这个类就不能再继承其他类了(java不支持多继承)
实现runnable接口:这个类可以继承其他类
下面是一些java继承的类型
常用方法
t.start();//启动线程,在操作系统中注册,加入到就绪队列,并不是立即执行
t.Setname("名字");//为线程设置名字
Thread t=new Thread(mt,"自定义名字");//以构造方法的方式设置名字
Thread.currentThread.getname();//获取正在执行的线程的名字
t.getpriority();//获取此线程的优先级1~10,默认都是5
t.setpriority(1);//设置线程的优先级,高优先级的先执行
Thread.sleep(1000);//在run中,让进程休眠指定时间(1000毫秒),此时从运行队列进入阻塞队列,睡眠时间结束进入就绪队列
t.join();//等待该线程完全执行结束在让其它线程执行(即让其他线程阻塞)
t.yield();//线程让步,让该线程从运行队列进入就绪队列
//后续加入锁后的方法
wait();//需要使用同步锁对象调用wait方法,调用后释放同步锁,从运行状态到阻塞状态
notify();//唤醒被wait的线程,若有多个线程被wait,则按照优先级
notifyAll();//唤醒所有被wait的线程
线程的生命周期?
线程的状态:
线程状态间的切换
新建状态new Thread() 不会被执行;通过start()方法此线程进入就绪状态;
线程的分类
一直在执行,在所有用户线程结束后自动结束(如GC垃圾回收就是)
设置一个线程为守护线程:t1.SetDaemon(true);