• 线程及其创建的方式


    线程主要发挥作用的时候:当一个线程所运行的I/O被堵塞的时候,同一进程中的其它线程能够使用CPU来进行计算。

    这样。就提高了程序的运行效率。


    状态:执行、就绪(等待被调用)、堵塞(等待I/O资源)

    两种创建方法
    1. 继承Thread类,并override当中的run()方法(当一个类没有继承其它类的时候。适合用这样的方法)
    2. 实现Runnable接口,并实现run()方法(当一个类已经继承另外一个类的时候。适合用这样的方法)
    通过使用自己定义的构造方法传递各种參数。
    启动:获得Thread对象后调用start()方法。

    方法一:继承Thread类
    public class MyThread1 extends Thread {
        public MyThread1(String name) {
            super(name);
        }
    
        public void run() {
            System.out.println(this.getName()); 
        }
    
        public static void main(String[] args) {
            Thread t1 = new MyThread1("阿三");
            t1.start();  
        }  
    }
    

    方法二:实现Runnable接口
    public class MyThread implements Runnable {
    
     private String name;
     
     public MyThread(String name) {
      this.name = name;
     }
     
     @Override
     public void run() {
        System.out.println(name); 
     } 
     
     public static void main(String[] args) {
      Thread tt1 = new Thread(new MyThread("张三"));
      tt1.start(); 
     } 
    }

    普通情况下,能够使用一个内部类来定义另外一个线程:
    /**
     * 启动子线程的方式(使用内部类定义另外一个线程)
     * @author XuJijun
     *
     */
    public class MyThread {
    	public static void main(String[] args) {
    		(new MyThread()).new AnotherThread("张三").start();
    	}
    	
    	/**
    	 * 内部类,实现子线程 
    	 *
    	 */
    	private class AnotherThread extends Thread{
    		private String msg;
    		
    		/*
    		 * 加一个參数,用于接收主线程的信息
    		 */
    		public AnotherThread(String msg) {
    			super();
    			this.msg = msg;
    		}
    
    		@Override
    		public void run() {
    			System.out.println("Hello " + msg);
    		}
    	}
    }

    等待和唤醒机制
    使用Object.wait()和Object.notify(),必须在同步方法或同步块里调用
    使用join()方法等待另外一个线程的终止,如:
    a.join();
    System.out.print("End"); //等待线程a结束后再打印出“End”

    sleep()和wait()的差别
    • sleep():占用CPU资源。或被调度走变成就绪状态
    • wait():不占用CPU资源。等待被notify()唤醒

    (原创文章,转载请注明转自Clement-Xu的csdn博客:http://blog.csdn.net/clementad/article/details/47027425


  • 相关阅读:
    递归判断字符串是否为回文
    原码,补码,反码
    Java语言程序设计2019.9.16
    四则运算---根据用户要求输出计算题源代码
    学生成绩管理系统-JAVA语言测试
    暑假生活第八周
    暑假生活第七周
    暑假生活第六周
    POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
    POJ 2226 Muddy Fields(最小点覆盖)题解
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7026849.html
Copyright © 2020-2023  润新知