线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
名词解释:进程,一个运行着的程序,一个进程里面又可以同时干多件事情,干着的每一件事情叫做一个线程。对于单个CPU的电脑:多线程本质上还是顺序执行的,并发;对于多个CPU的电脑,每一个CPU各自干着自己的事情,并行。
一个进程至少有一个线程,java进程中main线程。
在java中如何写一个线程
1)继承Thread类,重写run方法,可以实现一个线程,调用start()方法启动线程
2)实现Runnable接口,实现run方法,new Thread(Runnalbe r).strat();
package Test2;
public class MainTest {
public static void main(String[] args) {
ThreadDemo td = new ThreadDemo();
td.start();
ThreadDemo2 td2 = new ThreadDemo2();
new Thread(td2).start();
while(true){
System.out.println(Thread.currentThread().getName()+"Main程序进行中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package Test2;
public class ThreadDemo extends Thread{
public void run(){
while(true){
System.out.println(this.getName()+"程序出现Bug");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package Test2;
public class ThreadDemo2 implements Runnable{
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName()+"程序正在进行");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
同步synchronized:
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。
public class yinhangDemo extends Thread{
public static int a=100;
public void run() {
while (a>0) {
synchronized (yinhangDemo.class) {
a--;
System.out.println(this.getName()+"余额为:"+a);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class TestDemo2 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
yinhangDemo demo = new yinhangDemo();
demo.start();
}
}
}