在了解线程之前,我们先认识一下什么是进程
1.什么是进程
正在运行的程序,是系统进行资源分配的基本单位
现在的操作系统都是支持多进程的,可以同时执行多个进程,通过进程ID区分
2.什么是线程
线程,又称轻量级进程(Light Weight Process)
是进程中的一条执行路径,也是CPU的基本调度单位
一个进程由一个或多个线程组成,彼此间完成不同的工作,同时执行,称为多线程。
举例:
3.java如何实现多线程
第一种:继承Thread类并重写run方法
第二种:实现Runnable接口
第三种:实现Callable接口
3.1第一种:继承Thread类并重写run方法
1.获取当前线程的名称
第一种:通过父类Thread中的getName()可以获取线程名称。必须为Thread的子类
第二种:通过Thread类中的静态方法currenThread获取当前线程m,getName()获取线程名。任意处获取线程名
System.out.println(Thread.currentThread().getName()+"main========="+j);
3.2第二种:实现Runnable接口
案例:卖票案例
4.Thread(线程)常见方法
4.1.休眠
Thread.sleep(500);//演示代码执行 超时时间
4.2.放弃
Thread.yield();
4.3.加入
my.join();//别人执行完之后,才会执行我,main
4.4.优先级
4.5守护线程
线程安全问题
package demo04; import java.util.Arrays; public class Test04 { private static String arr[]=new String[3]; private static int index=0;//下标 public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Runnable() {//匿名内部 @Override public void run() { if (arr[index]==null){ arr[index]="hello"; index++; } } }); Thread t2 = new Thread(new Runnable() {//匿名内部 @Override public void run() { if (arr[index]==null){ arr[index]="world"; index++; } } }); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println(Arrays.asList(arr)); } }
同步方式
注意:
每个对象都有一个互斥索标记,用来分配给线程的
只有用于对象互斥索标记的线程,才能进入对该对象加锁的同步代码块
线程退出同步代码块时,会释放相应的互斥索标记
synchronized (){}
不足之处,请批评指教