学习java第19天个人总结

Day19个人总结

一、进程和线程


1、概念:

进程包括多个线程,一个进程可以有多个线程,每个独立运行着的程序称为一个进程,进程中最少有一个线程,简单的说进程就是操作系统的一个软件,线程就是进程中的一条执行路径

2、多线程的好处:

1)多线程提高执行效率

2)可以提高资源利用率

从宏观意义上讲多线程同一时刻执行多个线程,微观意义上来说cpu同一时刻只执行一个线程

Cpu时间片段

3、主线程和子线程

主线程:是指系统提供的线程,又叫main线程,由jvm虚拟机提供

子线程:需要程序员自己创建,又叫工作线程

二、Thread类和Runnable接口


1、作用:

用于自己创建的线程又叫子线程,需要继承Thread类和接口Runnable方能创建线程,创建的子线程默认情况下是随机和主线程抢占cpu资源进行执行,子线程和主线程两者是竞争关系,每个字线程都是独立开辟栈空间,并且是由主线程执行到.strat()来进行栈空间的开辟

2、Thread类方法的使用

类在集成Thread方法之后setName()和getName()方法不能重写,在原有子类就存在,可以通过super方法调用改变线程的名字,各方法如下:

1)  start()方法用于启动线程,并且创建新的线程在栈空间中开辟新的空间

2)  run()调用线程对象中的run方法 不会产生新的线程,是在主线程中执行的

3)  join()表示插队合并插队到当前线程前

4)  sleep()当前线程睡眠进入到阻塞状态,释放cpu资源,其他的线程均可抢占cpu资源

5)setPriority()设置线程优先级优先级高的尽可能多去抢占cpu资源(可能不准)设置范围为1-10之间,越高表示优先级越高

3、Thread和Runnable的使用资源的共享(关键代码)

public class TestContainer {

public static void main(String[] args) {

//创建Container类

Container container = new Container();

//创建三个线程操作Container

Thread thread =new Thread(container,"线程1:");

Thread thread2 =new Thread(container,"线程2:");

Thread thread3 =new Thread(container,"线程3:");

//启动各个线程

thread.start();

thread2.start();

thread3.start();

}

}

public class Container implements Runnable{

private int count=200;

@Override

public void run() {

for(int i=0;i<10;i++){

System.out.println("我是"+Thread.currentThread().getName()+"count还剩下"+this.getOne());

//this.getOne();

try {

Thread.sleep(100);

} catch (InterruptedException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public int getOne(){

this.count--;

return this.count;

}

}

三、经典面试题


1、start和run的区别

1)start() 会创建新的栈空间并且会产生新的子线程(工作线程)

2)run()调用线程对象中的run方法且不会产生新的线程,是在主线程中执行的

四、终止线程


1、线程终止:

1)  标志位停止线程

2)  .stop()方法终止线程(已过时)使用时可能不能执行完想要执行的程序

3)  Interrupt()方法中断线程,会抛出异常

2、使用如下:(关键代码)

例1

public class Test5 {

public static void main(String[] args) {

// 标志位  停止线程

C c = new C();

c.start();

// 加Scanner 完全是为了模拟 等待的过程

Scanner scanner = new Scanner(System.in);

scanner.nextLine();// 等待用户输入

// 改变标志位停止线程

//c.flag = false;

// 2 stop方法停止线程

c.stop();// 不推荐使用,有可能 不能执行完想要执行的内容

}

}

class C extends Thread{

boolean flag = true;

@Override

public void run() {

while(flag){

System.out.println("要睡了");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("睡醒了");

}

}

2

public class Test6 {

public static void main(String[] args) {

D d = new D();

d.start();

Scanner scanner = new Scanner(System.in);

scanner.next();

// 通过抛异常的方式 打断线程的执行

d.interrupt();

}

}

class D extends Thread{

@Override

public void run() {

System.out.println("要睡了");

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

System.out.println("被打醒的");

}

System.out.println("自然醒");

}

}

3、线程的五种状态(又叫生命周期,不是非常准确)

图解:

时间: 2024-10-03 22:52:17

学习java第19天个人总结的相关文章

学习java随笔第六篇:数组

一维数组 创建一维数组并输出 public class OneDimensionalArray { public static void main(String argas[]) { int i[]=new int[10]; for(int j=0;j<i.length;j++) { i[j]=j; System.out.println(i[j]); } } } 多维数组 创建多维数组并输出 public class MultiDimensional { public static void m

学习Java需要达到的25个目标

本文将告诉你学习Java需要达到的25个目标,希望能够对你的学习及找工作有所帮助.对比一下自己,你已经掌握了这25条中的多少 条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是 class,object,interaction以及statediagrams. 2.你需要学习Java语言的基础知识以及 它的核心类库 (collections,serialization,streams,networking,multi

【转】学习JAVA的步骤

好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基本没有其它任何一本书可以超越它.该书的作者Bruce Eckel在网络上被称为天才的投机者,作者的<Thinking in C++>在1995年曾获SoftwareDevelopment Jolt Award最佳书籍大奖,<Thinking in Jav

学习JAVA应该去的20个英文网站(java学习网站)

学习JAVA应该去的20个英文网站(java学习网站)  1. http://www.javaalmanac.com     Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.  2. http://www.onjava.com     O'Reilly的Java网站. 每周都有新文章.  3. http://java.sun.com     官方的Java开发者网站 - 每周都有新文章发表.  4. http://www.developer

学习Java基础的一些收获一(this、static、super、final)

Java语言中This关键字应用浅析 应用一:引用成员变量 public class Student{ //定义一个类,类的名字为student. public Student(){ //定义 一个方法,名字与类相同故为构造方法 this(“luobo”) //这个this就是调用了下面的有参数的构造方法 } public Student(String name){ //定义一个带形式参数的构造方法 } } 如上面这个代码中,有一个成员变量name.同时在方法中有个形式参数,名字也是name.然

推介一个学习JAVA的系列教程-狗鱼IT教程

介绍一个学JAVA的零基础学习JAVA的网站,推介一个学习JAVA的系列教程-狗鱼IT教程 下面是java的系教程: 1?[java教程]Java 教程 2?[java教程]Java 简介 3?[java教程]Java 开发环境配置 4?[java教程]Java 基础语法 5?[java教程]Java 对象和类 6?[java教程]Java 基本数据类型 7?[java教程]Java 变量类型 8?[java教程]Java 修饰符 9?[java教程]Java 运算符 10?[java教程]Ja

深入学习 Java 序列化

深入学习 Java 序列化 来源  http://www.importnew.com/24490.html 原文 http://beautyboss.farbox.com/post/study/shen-ru-xue-xi-javaxu-lie-hua 前言 对于Java的序列化,一直只知道只需要实现Serializbale这个接口就可以了,具体内部实现一直不是很了解,正好这次在重复造RPC的轮子的时候涉及到序列化问题,就抽时间看了下 Java序列化的底层实现,这篇文章算是这次的学习小结吧. 第

零基础的人该怎么学习JAVA

对于JAVA有所兴趣但又是零基础的人,该如何学习JAVA呢?对于想要学习开发技术的学子来说找到一个合适自己的培训机构是非常难的事情,在选择的过程中总是 因为这样或那样的问题让你犹豫不决,阻碍你前进的步伐,今天就让小编为您推荐培训机构新起之秀--乐橙谷Java培训机构,助力你成就好未来. 选择java培训就到乐橙谷 北京有什么好的Java培训机构?来乐橙谷北京学Java,零基础走起,乐橙谷Java基础班授课老师经验非常丰富,课程内容安排合理,适合于有一点点Java基础甚至一点都不会Java的同学学

学习java之前

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 学习java之前 2.1认识JDK 工具包: 编译和运行其使用的是JDK里面的编译和运行,首先得下载JDK; 1.JDK的安装: JDK的官网:(http://www.oracle.com) 找到处按以下步骤: 2.安装JDK : 先双击一下jdk-8u144-windows-x64.exe然后进入安装: 然后在你写的路径下生成了文件 就是JDK的目录的位置