首页 > 编程语言 > 详细

线程基础

时间:2019-07-22 22:54:10      阅读:88      评论:0      收藏:0      [点我收藏+]
—、线程基础知识
  • 线程:程序中不同的执行路径
  • 进程:一个静态的程序
    cpu由于运行很快,所以将时间片分给多个线程,这样看起来就像是并行执行
  • 多进程:在操作系统中能够同时运行多个任务(程序)
  • 多线程:在同一应用程序中有多个顺序流同时执行
  • 创建线程的两种方法:
    1)Runnable接口
    2)继承Thread类
    一般使用Runnable接口,因为这样可以继承其他类
    线程状态转换
    技术分享图片
二、线程控制的几种方法

线程控制的几种方法:sleep、join、yield、priority

sleep阻塞线程:

代码举例:

public class Threaddemo1 {

    public static void main(String[] args) {
        Runner1 r = new Runner1();
        r.start();
        try
        {
            Thread.sleep(10000);
        }catch (InterruptedException e) {
        }
        //中断线程
        r.interrupt();
    }
}

class Runner1 extends Thread{
    public void run() {
        while (true) {
            System.out.println("------");
           //sleep阻塞一定要捕获异常
            try {
                Thread.sleep(1000);
            }catch (InterruptedException e) {
                return;
            }
                    
        }
        
    }
    
}

join合并线程:

代码举例:

//join()合并线程
public class Threaddemo2 {
        public static void main(String[] args) {
        // TODO Auto-generated method stub
        Mythread t1 = new Mythread("xs");
        t1.start();
        //合并线程,t1合并到主线程,只有当t1完成了才继续执行主线程
        //问题:为什么一定要try抛出异常
        try {
            t1.join();
        }catch (InterruptedException e) {
            // TODO: handle exception
        }
        for (int i = 0; i < 10; i++) {
            System.out.println("i am main thread"+i);
        }
    }
}
class Mythread extends Thread{

    public Mythread(String s) {
        super(s);
    }
    
    public void run() {
        for (int i = 0; i <10; i++) {
            System.out.println("i am "+getName());
        }
        try {
            sleep(1000);
        }catch (InterruptedException e) {
            // TODO: handle exception
            return;
        }
    }
}

yield:
代码举例:

//yield让出cpu,让其他线程执行机会,但是不是让其他线程全部执行完,而是给出一点时间
public class Threaddemo3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Mythread1 t1 = new Mythread1("xs");
        Mythread1 t2 = new Mythread1("qq");
        t1.start();
        t2.start();
        }
}

class Mythread1 extends Thread{
    public Mythread1(String s) {
        // TODO Auto-generated constructor stub
        super(s);
        }
    
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName()+i);
            if (i%10==0) {
                yield();
            }
        }
    }
}

priority增加线程优先级:

//增加线程的优先级
public class Threaddemo4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Thread t1 = new Thread(new Mythread3());
        Thread t2 = new Thread(new Mythread4());
        t1.setPriority(Thread.NORM_PRIORITY + 5);
        t1.start();
        t2.start();
        }
}
class Mythread3 implements Runnable{
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("t1"+i);
        }
    }
}
class Mythread4 implements Runnable{
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("t2:"+i);
        }
    }
}

线程基础

原文:https://www.cnblogs.com/xushun/p/11228692.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!