1.线程和进程之间的区别
线程:可以简单理解成是在进程中独立运行的子任务。
多线程是异步的,所以千万不要把Eclipse中的代码的顺序当成线程执行的顺序,线程被调用的实际是随机的。
2.使用线程有两种方式
- 继承Thread类
- 实现Runnable接口
- 代码实现
public class Run { public static void main(String[] args) { Runnable runnnable = new MyRunnable(); Thread thread = new Thread(runnnable); thread.start(); System.out.println("运行结束"); } } public class MyRunnable implements Runnable { public void run() { System.out.println("运行中!"); } }
3.实例变量和线程安全
自定义线程类中的实例变量针对其他的线程可以有共享和不共享之分,这个多个线程之间交互时是很重要的一个技术点。
- 不共享数据的情况
代码实现:
package com.test.t2; /** * 共创建3个线程,每个线程都有自己的count变量,自己减少自己的count变量的值。这样的情况就是变量不共享,此示例 * 并不存在多个线程访问同一个实例变量的情况 * Created by admin on 2018/12/17. */ public class Run { public static void main(String[] args) { MyThread a = new MyThread("A"); MyThread b = new MyThread("B"); MyThread c = new MyThread("C"); a.start(); b.start(); c.start(); } } package com.test.t2; /** * Created by admin on 2018/12/17. */ public class MyThread extends Thread{ private int count = 5; public MyThread(String name){ super(); this.setName(name);//设置线程名称 } @Override public void run() { super.run(); while (count > 0) { count--; System.out.println("由"+this.currentThread().getName()+"计算,count="+count); } } }
- 共享数据的情况
代码设计: