1、线程和进程的概念多线程
(1)进程概念并发
进程就是正在执行的程序,一个进程一般就是一个正在执行的应用程序。进程就是一个可执行程序一次运行的过程,它是系统进行资源分配和调度的一个独立单位。ide
(2)线程概念函数
线程是程序中的一个执行流,每一个线程都有本身的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不一样的线程能够执行一样的函数(不一样的线程有可能用一样的数据或方法)。this
(3)进程和线程的关系spa
a.一个线程只能属于一个进程,而一个进程能够有多个线程,但至少有一个主线程,其余的线程都是由主线程去建立和启动的。线程
b.系统资源分配给进程,同一个进程的全部线程共享该进程的全部资源;指针
c.线程是指进程内的一个执行单位,也是进程内的可调度实体;code
2、多线程blog
(1)多线程概念
多线程是指程序中包含多个执行流,即在一个程序中能够同时运行多个不一样的线程来执行不一样的任务,也就是说容许单个程序建立多个并行执行的线程来完成各自的任务。(即同一时间执行多任务)。须要执行并发任务才须要用到多线程。
(2)多线程好处
a.Java支持编写多线程的程序;
b.多线程最大好处在于能够同时并发执行多个任务;
c.多线程能够最大限度地减低CPU的闲置时间,从而提升CPU的利用率
(3)多线程的不利方面
a.线程也是程序,因此线程须要占用内存,线程越多占用内存也越多;
b.多线程须要协调和管理,因此须要CPU时间跟踪线程;
c.线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
d.线程太多会致使控制太复杂,最终可能形成不少bug,甚至会形成死锁;
3、Java中的线程
(1)Java中的主线程
任何一个Java程序启动时,一个线程马上运行,它执行main方法,这个线程称为线程的主线程,也就是说任何Java程序都至少有一个线程,即主线程;主线程的特殊之处在于:
a.它是产生其余线程子线程的线程;
b.一般它必须最后结束,由于执行其余子线程的关闭工做;
(2)Java建立线程的两种方法
a.继承Thread类的方式
b.实现Runnable接口的方式
(3)自定义线程----继承Thread方法
a.在Java中要实现线程,最简单的方式就是扩展Thread类,重写其中的run方法,方法原型以下:
public void run();
b.Thread类中的run方法自己并不执行任何操做,若是咱们重写了run方法,当线程启动时,它将执行run方法
c.Thread类也实现了Runnable接口
继承Thread类例子:
//定义 public class MyThread extends Thread{ public void run(){ ...... } } //调用 MyThread thread = new MyThread(); thread.start();
(4)线程简单例子
a.继承Thread类的方式
package com.Thread.Demo; public class MyPrinterThread extends Thread{ public MyPrinterThread(String name) { super(name); } private int x = 0 ; public void run(){ for (int i = 0; i < 100; i++) { System.out.println(this.getName()+":"+"x="+ x); x++; } } }
package com.Thread.Demo; public class ThreadTest { public static void main(String[] args) { MyPrinterThread T1 = new MyPrinterThread("Thread1"); MyPrinterThread T2 = new MyPrinterThread("Thread2"); T1.start(); T2.start(); } }
b.实现Runnable接口的方式
package com.Thread.Demo; public class PrinterRunable implements Runnable{ private int x = 100 ; @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName()+":"+"x="+x); x--; } } }
package com.Thread.Demo; public class RunableTest { public static void main(String[] args) { PrinterRunable pr1 = new PrinterRunable(); PrinterRunable pr2 = new PrinterRunable(); Thread t1 = new Thread(pr1, "Thread1"); Thread t2 = new Thread(pr2, "Thread2"); //设置线程的优先级 t1.setPriority(1); t2.setPriority(10); t1.start(); t2.start(); } }
(5)线程经常使用方法
a.设置线程的优先级
Thread t = new Thread(); t.setPriority(1);
b.