Java多线程快速入门
2017-08-25 14:59
591 查看
1、 多线程概述(为什么我们要用多线程)
进程: 是一个正在执行中的程序,每一个进程都有一个执行顺序。该顺序可以叫做执行路径,或者叫做一个控制单元。线程: 线程就是进程当中执行的一条路径,也是进程当中的一个控制单元。一个应用程序中一定会有一个线程,这个线程我们叫做主线程。
多线程: 多线程就是一个应用程序中,有多个不同的执行路径。我们就叫做多线程。
多线程场景:迅雷下载、QQ聊天、游戏客户端。提高程序效率
为什么我们用使用多线程?
为了提供程序的运行效率!
2.1如何创建一个线程呢?
创建线程方式一:继承Thread类。步骤:
1,定义一个类继承Thread类。
2,覆盖Thread类中的run方法。
3,直接创建Thread的子类对象创建线程。
4,调用start方法开启线程并调用线程的任务run方法执行。
主线程的名字就是main。
面试题?使用继承Thread类创建线程好?还是使用实现Runnable创建线程好?
Runnable接口好?一旦我们继承了Thread类,不能在继续继承,一旦实现了Runnable接口,还可以继续继承类。
练习题 创建两条线程进行交互执行。
package itmayi; /** * 练习题 创建两条线程进行交互执行 * @author zzq * */ class ThreadDemo2 extends Thread{ private String name; public ThreadDemo2(String name){ this.name = name; } public void run(){ System.out.println(name+"开始执行啦!"); for (int i = 0; i < 20; i++) { System.out.println(name+"线程:i:"+i); } } } public class DemoThread2 { public static void main(String[] args) { ThreadDemo2 threadDemo = new ThreadDemo2("张三"); ThreadDemo2 threadDemo2 = new ThreadDemo2("李四"); //threadDemo.run(); //threadDemo2.run();//顺序执行 threadDemo.start(); threadDemo2.start();//线程执行 } }
线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。
新建状态:
ThreadDemo2threadDemo2 = newThreadDemo2("李四");
只是初始化了,还没有调用start方法。
一旦调用start方法,就进入就绪状态。
一旦调用了某个线程,就进入运行状态,执行run方法。
/** * 演示阻塞和死亡 * @author zzq * */ class TestThread extends Thread{ public TestThread(String threadName){ super(threadName); } /** * 创建线程执行的代码都放在run方法中 */ public void run() { for (int i = 0; i < 20; i++) { System.out.println("线程名称:"+this.getName()+"i:"+i); System.out.println("id:"+this.currentThread().getId()+"线程名称:"+this.getName()+"i:"+i); //getName 获取定义的值name //currentThread() 获取唯一的标识 是算法算的不是自己定义的 if(i==5){ //(停止状态) this.stop(); } try { //(阻塞)每隔一秒打印一个i值 this.sleep(1000); } catch (Exception e) { } System.out.println("i:" + i); } } } public class ThreadTest { public static void main(String[] args) { TestThread testThread = new TestThread("线程1"); testThread.start(); TestThread testThread2 = new TestThread("线程2"); testThread2.start(); } }
6、获取线程相关信息
CurrentThread():返回当前正在执行的线程对象的引用。GetId():返回该线程的标识符。
GetName():返回该线程的名称。
class TestThread2 extends Thread{ public TestThread2(String testName){ super(testName); } public void run() { System.out.println("子线程"); for(int i =0;i<20;i++){ //this.getName()是通过构造函数传进来的testName,自动赋值给线程中的name System.out.println("线程名称"+this.getName()+"i:"+i); /** * this.currentThread()获取当前线程的引用(线程唯一的标识, * id值是多线程算法算的,不是自定义的) * */ System.out.println("id:"+this.currentThread().getId()+"线程名称:"+this.getName()+"i:"+i); //getName获取定义的值name //currentThread()获取唯一的标识 是算法算的不是自己定义的 if(i==5){ this.stop(); } try { this.sleep(1000); } catch (Exception e) { } System.out.println("i:" + i); } } } public class ThreadTest2 { public static void main(String[] args) { System.out.println("主线程"); TestThread2 TestThread2 = new TestThread2("线程1"); TestThread2.start(); TestThread2 TestThread3 = new TestThread2("线程2"); TestThread3.start(); } }
7、真实企业多线程分批处理数据
什么是多线程?在一个应用程序中,同时有多个不同的执行路径。
说一下多线程的好处?
提高程序效率。
线程和进程有什么区别?
线程是进程 的一条执行路径,而进程是线程的集合。
什么是线程同步、异步?
线程同步表示,当前线程执行完后下一个线程接着执行。(当有多个线程去共享同一个变量的时候,只让一个线程使用,使用完成之后释放了锁,才能让其他线程使用)
线程异步表示,在一个应用程序中,同时有多个不同的执行路径。(两个代码同时在一起执行)例如javaweb,ajax,android,handler
什么是线程不安全?
当多个线程共享同一个变量的时候,会造成其他线程的干扰,如何解决:使用线程同步技术,用上锁(synchronized).让一个线程执行完了,再让另一个线程执行。
Sleep()和wait()有什么区别?
Sleep是让当前线程指定休眠时间,然后继续工作,不释放锁。
让当前线程wait则是等待,直到有线程通知notify()唤醒他才会重新工作。释放锁
相关文章推荐
- java 多线程快速入门
- java多线程与高并发的快速入门指南
- Java多线程 快速入门(一)
- Java多线程 快速入门(二)
- java :java快速入门
- java反射快速入门(一)
- java.util.logging日志功能使用快速入门
- 自定义java Annotation快速入门与提高
- 用java多线程实现“百度翻译接口API快速翻译”
- JAVA快速入门
- Java加密和数字签名编程快速入门
- Java加密和数字签名编程快速入门
- JAVA快速入门-面向对象三大特性-多态性
- JAVA快速入门-异常
- Java中使用Jedis操作Redis—Redis快速入门
- Java基础学习总结(25)——Log4j快速入门教程
- JAVA快速入门-包和权限
- Java Web快速入门——全十讲
- (九)Java入门--多线程(2)安全问题
- Java加密和数字签名编程快速入门(2/3)