Java中的线程(一)(基本方法)
一、多线程的概念
1、进程: 每一个正在执行的程序都称为进程。进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
2、 线程: 线程就是进程的一条执行路径。一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。
二、多线程的实现模式(两种)
1、继承Thread类,重写run()方法
启动:创建子类对象.start()
- public class MyThread extends Thread {// 继承Thread类
- @Override
- public void run() {
- for(int i=1;i<101;i++) {
- System.out.println(getName()+"=="+i);
- }
- }
- }
- public class ComeTrue {
- public static void main(String[] args) {
- MyThread t1 =new MyThread(); // 创建子类对象
- MyThread t2 =new MyThread();
- t1.start(); // 启动线程
- t2.start();
- }
- }
2、实现runnable接口,重写run()方法
启动:使用静态代理
1)、创建真实角色
2)、创建代理角色
3)、代理角色.start()
- public class MyThread implements Runnable{// 实现Runnable接口
- @Override
- public void run() {
- for(int i=1;i<101;i++) {
- System.out.println(Thread.currentThread().getName()+"=="+i);
- }
- }
- }
- public class ComeTrue {
- public static void main(String[] args) {
- MyThread my =new MyThread(); // 创建真实对象
- Thread t1 = new Thread(my,"线程一"); //创建代理对象
- Thread t2 = new Thread(my,"线程二"); //创建代理对象
- t1.start(); // 启动线程
- t2.start();
- }
- }
三、线程生命周期
四、常用方法与线程控制
1、常用方法
- public class MyThread implements Runnable{// 实现Runnable接口
- @Override
- public void run() {
- for(int i=1;i<101;i++) {
- System.out.println(Thread.currentThread().getName()+"=="+i);
- }
- }
- }
- public class ComeTrue {
- public static void main(String[] args) {
- MyThread my =new MyThread(); // 创建真实对象
- Thread t1 = new Thread(my,"线程一"); //创建代理对象
- t1.start(); // 启动线程
- /*
- * 常用方法
- */
- t1.isAlive(); // 判断线程是否还活着,即线程是否还未终止
- t1.setPriority(10); // 设置线程的优先级数值,其值为1——10
- t1.getPriority(); // 获得线程的优先级数值
- t1.setName("线程一"); // 设置线程的名字
- t1.getName(); // 获取线程的名字
- t1.currentThread(); // 获取当前正在运行的线程对象,也就是获取自己本身
- }
- }
2、线程控制
- public class MyThread implements Runnable{// 实现Runnable接口
- @Override
- public void run() {
- for(int i=1;i<101;i++) {
- try {
- Thread.sleep(1000); //线程休眠 与时间关联 处于线程阻塞状态
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println(Thread.currentThread().getName()+"=="+i);
- }
- }
- }
- public class ComeTrue {
- public static void main(String[] args) {
- MyThread my =new MyThread(); // 创建真实对象
- Thread t1 = new Thread(my,"线程一"); //创建代理对象
- Thread t2 = new Thread(my,"线程二"); //创建代理对象
- // 后台线程
- // 设置后台(守护)线程---需要在线程启动之前设置
- // 守护线程:当最后一个非守护线程结束时,守护线程随着JVM一同结束工作 如:垃圾回收器
- t1.setDaemon(true);
- t1.start(); // 启动线程
- t2.start(); // 启动线程
- /*
- * 线程控制
- */
- // 线程加入
- try {
- t2.join(); // 线程加入 等待设置为加入线程结束后,其他线程才开始运行 其他线程处于阻塞状态
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- // 线程礼让
- t2.yield(); // 当t2抢夺到CPU时间片时,放弃一次,再次争夺 处于阻塞状态
- // stop(): 线程终止 线程死亡
- // interrupt(): 线程中断 线程阻塞
- }
- }