标签:add 无法 stat 开启 method zed 包含 err 安全性
进程: 正在运行的程序。一个应用程序在内存中的执行区域
线程:进程中的一个执行单元,执行路径。负责当前进程中程序的执行
一个进程可以有一个线程,也可以有多个线程
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
单线程:安全性高,效率低
多线程:安全性低,效率高
单线程程序:若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。如先刷牙然后再洗脸最后洗澡。
多线程程序:若有多个任务可以同时执行。如刷牙洗脸加洗澡。
创建线程的目的是什么?
是为了建立程序单独的执行路径,让多部分代码实现同时执行。也就是说线程创建并执行需要给定线程要执行的任务。
方式一:
1.定义一个类继承Thread。
2.重写run方法。
3.创建子类对象,就是创建线程对象。
4.调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法
public class ThreadDemo01 { public static void main(String[] args) { //创建线程实例
Student s = new Student(); //修改线程名字 s.setName("wdnmd");
//启动线程 s.start(); Student s2 = new Student(); s2.setName("xswl"); s2.start(); } } class Student extends Thread{ @Override public void run(){ for (int i = 0; i < 100; i++) { System.out.println(getName()+"---"+i); } } }
方式二:
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程。
public class MyThread implements Runnable { int num; public MyThread(int num) { this.num = num; } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println( Thread.currentThread().getName() + "------"+ i +num ); } } }
public static void main(String[] args) { MyThread mt = new MyThread(100); Thread t = new Thread(mt); t.setName("WDNMD"); t.start(); Thread t2 = new Thread(mt); t2.setName("XSWL"); t2.start(); }
格式: synchronized(锁对象){ //需要同步的代码 }
synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问
锁对象需要被所有的线程所共享
同步:安全性高,效率低
非同步:效率高,但是安全性低
同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问,则整个方法全部锁住,其他线程则无法访问
synchronized
注意:
非静态同步方法的锁对象是this
静态的同步方法的锁对象是当前类的字节码对象
public class TicketThread implements Runnable { static int tickets = 100;//火车票数量 Object obj = new Object(); @Override public void run() { //出售火车票 while(true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } method(); } } private static synchronized void method() { if(tickets > 0) { System.out.println(Thread.currentThread().getName() + ":" +tickets--); } } }
标签:add 无法 stat 开启 method zed 包含 err 安全性
原文地址:https://www.cnblogs.com/viperqy/p/11418567.html