黑马程序员--------Java多线程讲解笔记

进程:正在进行中的程序。 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。

  线程:就是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 。一个进程中至少要有一个线程。当一个进程中线程有多个时,就是多线程。

  为什么要用多线程

  1,让计算机"同时"做多件事情,节约时间。

  2,后台运行程序,提高程序的运行效率.。

  3,多线程可以让程序"同时"处理多个事情。

  4,计算机CPU大部分时间处于空闲状态,浪费了CPU资源。

  1.创建线程的两种方式:

  方式一步骤:继承Thread类

  子类覆盖父类中的run方法,将线程运行的代码存放在run中。

  建立子类对象的同时线程也被创建。

  通过调用start方法开启线程。

public class ThreadTest extends Thread{
 private int i;
 public void run() {
  for (i = 0; i < 100; i++)
   System.out.println(Thread.currentThread().getName() + "-------"+ i);
 }
 public static void main(String[] args) {
  Demo d1 = new Demo();
  Demo d2 = new Demo();
  d1.start();
  d2.start();
  for (int i = 0; i < 60; i++)
   System.out.println(Thread.currentThread().getName()+"----------" + i);
 }
}

方式二步骤:实现Runnable接口

  子类覆盖接口中的run方法。

  通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。

  Thread类对象调用start方法开启线程。


public class RunnableTest implements Runnable {

 private int num = 100;

 @Override
 public void run() {
  while (true) {
   if (num > 0) {
    try {
     Thread.sleep(100);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + "----->"
      + num--);
   } else {
    break;
   }
  }
 }

 public static void main(String args[]) {
  RunnableTest rt = new RunnableTest();
  Thread t1 = new Thread(rt, "新线程1");
  Thread t2 = new Thread(rt, "新线程2");
  Thread t3 = new Thread(rt, "新线程3");
  t1.start();
  t2.start();
  t3.start();
 }

  2.两种创建方式的对比

  Runnable接口相对于继承Thread类的好处:

  1.适合多个相同程序代码的线程去处理同意资源的情况,把虚拟CPU(线程)同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。

  2.可以避免由于java的单继承特点带来的局限。当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以只能使用Runnable接口方法。

  3.有力与程序的健壮性,代码能给被多个线程共享,代码与数据是独立的。

 线程的四种状态及其转换

  同步代码块

  1)同步的前提:

  A.必须有两个或两个以上的线程

  B.必须保证同步的线程使用同一个锁。必须保证同步中只能有一个线程在运行。

  好处与弊端:解决了多线程的安全问题。多个线程需要判断锁,较为消耗资源。


public class RunnableTest implements Runnable {

 private int num = 100;
 Object obj = new Object();

 @Override
 public void run() {
  while (true) {
   synchronized (obj) {
    if (num > 0) {
     try {
      Thread.sleep(100);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     System.out.println(Thread.currentThread().getName()
       + "----->" + num--);
    } else {
     break;
    }
   }
  }
 }

 public static void main(String args[]) {
  RunnableTest rt = new RunnableTest();
  Thread t1 = new Thread(rt, "新线程1");
  Thread t2 = new Thread(rt, "新线程2");
  Thread t3 = new Thread(rt, "新线程3");
  t1.start();
  t2.start();
  t3.start();
 }

}

进程:正在进行中的程序。 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。

  线程:就是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 。一个进程中至少要有一个线程。当一个进程中线程有多个时,就是多线程。

  为什么要用多线程

  1,让计算机"同时"做多件事情,节约时间。

  2,后台运行程序,提高程序的运行效率.。

  3,多线程可以让程序"同时"处理多个事情。

  4,计算机CPU大部分时间处于空闲状态,浪费了CPU资源。

  1.创建线程的两种方式:

  方式一步骤:继承Thread类

  子类覆盖父类中的run方法,将线程运行的代码存放在run中。

  建立子类对象的同时线程也被创建。

  通过调用start方法开启线程。

public class ThreadTest extends Thread{
 private int i;
 public void run() {
  for (i = 0; i < 100; i++)
   System.out.println(Thread.currentThread().getName() + "-------"+ i);
 }
 public static void main(String[] args) {
  Demo d1 = new Demo();
  Demo d2 = new Demo();
  d1.start();
  d2.start();
  for (int i = 0; i < 60; i++)
   System.out.println(Thread.currentThread().getName()+"----------" + i);
 }
}

方式二步骤:实现Runnable接口

  子类覆盖接口中的run方法。

  通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。

  Thread类对象调用start方法开启线程。


public class RunnableTest implements Runnable {

 private int num = 100;

 @Override
 public void run() {
  while (true) {
   if (num > 0) {
    try {
     Thread.sleep(100);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName() + "----->"
      + num--);
   } else {
    break;
   }
  }
 }

 public static void main(String args[]) {
  RunnableTest rt = new RunnableTest();
  Thread t1 = new Thread(rt, "新线程1");
  Thread t2 = new Thread(rt, "新线程2");
  Thread t3 = new Thread(rt, "新线程3");
  t1.start();
  t2.start();
  t3.start();
 }

  2.两种创建方式的对比

  Runnable接口相对于继承Thread类的好处:

  1.适合多个相同程序代码的线程去处理同意资源的情况,把虚拟CPU(线程)同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。

  2.可以避免由于java的单继承特点带来的局限。当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以只能使用Runnable接口方法。

  3.有力与程序的健壮性,代码能给被多个线程共享,代码与数据是独立的。

 线程的四种状态及其转换

  同步代码块

  1)同步的前提:

  A.必须有两个或两个以上的线程

  B.必须保证同步的线程使用同一个锁。必须保证同步中只能有一个线程在运行。

  好处与弊端:解决了多线程的安全问题。多个线程需要判断锁,较为消耗资源。


public class RunnableTest implements Runnable {

 private int num = 100;
 Object obj = new Object();

 @Override
 public void run() {
  while (true) {
   synchronized (obj) {
    if (num > 0) {
     try {
      Thread.sleep(100);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     System.out.println(Thread.currentThread().getName()
       + "----->" + num--);
    } else {
     break;
    }
   }
  }
 }

 public static void main(String args[]) {
  RunnableTest rt = new RunnableTest();
  Thread t1 = new Thread(rt, "新线程1");
  Thread t2 = new Thread(rt, "新线程2");
  Thread t3 = new Thread(rt, "新线程3");
  t1.start();
  t2.start();
  t3.start();
 }

}

posted on 2013-09-05 10:25 顺其自然EVO 阅读(198) 评论(0)  编辑  收藏

时间: 2024-12-03 21:27:19

黑马程序员--------Java多线程讲解笔记的相关文章

网络资源-黑马程序员Java 知识——精华总结

获取更多资源Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识.................................................................................6 1.何为编程?...................................................................................................................6 2.J

黑马程序员----java基础--网络编程

 一. 网络参考模型 1.OSI参考模型和TCP/IP 参考模型 七层描述: (1). 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流. (2). 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这一层工作的设备是交换机,数据通过交换机来传输. (3). 网络层:主要将下层接收到的数据进行IP地址(例,192.168.0.1)的封装与解封装.这一层工作的设备是路由器.. (4). 传输层:定义了一

传智播客 黑马程序员JAVA视频分享,0基础到高手的蜕变,不看后悔~~~~

问题描述 全国最顶尖培训机构传智播客的JAVA全套教学视频,一套只要人品不出问题,通过自学就能找到5K工作的视频,我自学也是用的这里面的视频.视频下载链接.拿了视频的,回复一下冒个泡呀~~~ 解决方案 本帖最后由 li413903382 于 2013-02-22 16:09:50 编辑解决方案二:没有人支持么?解决方案三:没有人支持么解决方案四:自己再来支持下解决方案五:支持下你吧,哈俣解决方案六:谢谢分享了,支持哈!!解决方案七:自己来顶了.解决方案八:我觉得不错,对新手而言,非常给力解决方案

全国顶尖培训机构黑马程序员JAVA全套教学视频分享

问题描述 大家好,我也是自学派的,只是分享下好的自学视频,自学这套视频,在北京一般找到工作都是5K+如果还想深入的话,还得靠自己继续自学其他扩展提高视频,我只是分享下给大家好东西. 解决方案 解决方案二:在北京5K应该也够呛吧解决方案三:求资源连接我QQ321354544谢谢解决方案四:主公.求资料.QQ:275204149在这先谢谢.

黑马程序员 一、java 概述与基础知识

获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务.这种人和计算机之间交流的过程就是编程.   2.Java 语言概述,历史.特点 是 SUN(Stanford Universit

黑马程序员 四、面向对象(2)

Java帮帮-IT资源分享网四.黑马程序员-面向对象(2) 第四篇:  1.基本数据类型的包装类 引言:Java 提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型, 那么我们怎么能把基本数据类型称为对象呢?  除了 Integer 和 Character 定义的名称和对应的基本类型差异大,其他六种都是将首字母大写 就可以了. Integer,Byte,Float,Double,Short,Long 都是 Number 类的子类.(Number 类后面讲): Character

黑马程序员 六、线程技术

Java帮帮-IT资源分享网  六.黑马程序员-线程技术 第六篇  1.进程和线程 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中 可以有多个线程.比如在 Windows 系统中,一个运行的 xx.exe 就是一个进程. Java 程序的进程里有几个线程:主线程, 垃圾回收线程(后台线程) 线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享 数据. 多进程:操作系统中同时运行的多个程序; 多线程:在同一个进程中同时运行的多个任务

黑马程序员 二、方法与数组

获得更多资源关注Java帮帮IT资源分享网  二.黑马程序员-方法与数组 第二篇: 1.什么是方法(Method)? 方法是一组为了实现特定功能的代码块的集合.方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护 性强. ②:减少代码重复 一个固定的功能,可能会在程序中多次使用,在使用时只需要调用写好的方法,而不用重复 书写对应的功能代码. 方法在书写时需要注意以下两点: ①:逻辑严谨 方法实现的一个完整的功能,所以

黑马程序员 九、IO 操作(1)

Java帮帮-IT资源分享网  九.黑马程序员-IO 操作(1) 第九篇 IO 文件操作(1)  1.IO 的概述和 File 方法 IO 流用来处理设备之间的数据传输 Java 对数据的操作是通过流的方式 Java 用于操作流的对象都在 IO 包中 File 类在整个 IO 包中与文件本身有关的操作类,所有的与文件本身有关指的是创建.删除 文件等操作.在 java.io 包中的 File 类本身是一个跨平台的文件操作类,所以在操作中要更 多的考虑到各个操作系统的区别. File 即指文件也指文