java入门了解06

1.进程 :
    (一)正在执行的程序称作为一个进程。 进程负责了内存空间的划分。

(二)问题: windows号称是多任务的操作系统,那么windows是同时运行多个应用程序吗?

从宏观的角度: windows确实是在同时运行多个应用程序。

从微观角度: cpu是做了一个快速切换执行的动作,由于速度态度,所以我感觉不到在切换 而已。

2.线程:
     线程的优先级默认是5;
    (一)线程在一个进程 中负责了代码的执行,就是进程中一个执行路径,

(二)多线程: 在一个进程中有多个线程同时在执行不同的任务。

(三)提问 :a.代码的执行是线程负责的,那么他的执行过程?

运行任何一个java程序,jvm在运行的时候都会创建一个main线程执行main方法中所有代码。

b.一个java应用程序至少有几个线程?

至少有两个线程, 一个是主线程负责main方法代码的执行,一个是垃圾回收器线程,负责了回收垃圾。

(四)多线程的好处:
              1.解决了一个进程能同时执行多个任务的问题。
              2. 提高了资源的利用率。

(五)多线程 的弊端:
              1. 增加cpu的负担。
              2. 降低了一个进程中线程的执行概率。
              3. 引发了线程安全 问题。
              4. 出现了死锁现象。

(六)如何创建多线程:

a.创建线程的方式:

方式一:
                         1. 自定义一个类继承Thread类。
                         2. 重写Thread类的run方法 , 把自定义线程的任务代码写在run方法中
                         疑问: 重写run方法的目的是什么?
                                   每个线程都有自己的任务代码,jvm创建的主线程的任务代码就是main方法中的所有代码, 自定义                                    线程的任务代码就写在run方法中,自定义线程负责了run方法中代码。
                         3. 创建Thread的子类对象,并且调用start方法开启线程。

注意:一个线程一旦开启,那么线程就会执行run方法中的代码,run方法千万不能直接调用,直接调用                                       run方法就相当调用了一个普通的方法而已并没有开启新的线程。
    (七)创建多线程例子

public class MyThread extends Thread{
                  @override//重写Thread的run方法,再调用这个自定义的线程
                  public void run(){
                      for(int i=0;i<10;i++){
                         System.out.println("自定义线程:"+i);
                      }
                  }
                  public static void main(String[] args){
                         //创建自定义的线程类
                         Demo d=new Demo();
                         //调用start方法启用线程,不能通过d.run()方法调用,这样没有启动线程
                         d.start();

                         for(int i=0;i<10;i++){
                             System.out.println("主线程:"+i);
                         }
                  }

              }

(八)线程安全(很重要)
              a.多线程售票,出现几个线程一起到达莫个位置出现的问题这就是线程安全问题
              b.解决办法:出现线程安全原理是多个线程同时访问代码块内部不该同时访问的位置,我们让那部分代码成为一个                                整 体一次只能给一个线程访问,就解决问题了
                               出现线程安全问题的根本原因:
                                    1. 存在两个或者两个以上 的线程对象,而且线程之间共享着一个资源。
                                    2. 有多个语句操作了共享资源
                  方式一:同步代码块
                                  synchronized(锁对象){
                                            需要被同步的代码...
                                  }
                              注意:1.任意一个对象都可以作为锁对象
                             原因:任意对象都可作为一个锁对象, 因为凡是对象内部都维护了一个状态,
                              Java的同步机制,就是将对象中的状态作为锁的标识
                              state=0:开;1关
                                       2.在同步代码块中调用sleep方法并不是释放对象
                                       3.只有真正需要同步代码块时,否则会降低效率
                                       4.多线程操作的锁对象,必须是唯一共享,否则无效
             c.例子:一个银行账户5000块,两夫妻一个拿着 存折,一个拿着卡,开始取钱比赛,每次只能取一千块,要求不准                          出现线程安全问题。

class SaleTicket extends Thread{

     static int num = 50;//票数  非静态的成员变量,非静态的成员变量数据是在每个对象中都会维护一份数据的。

     static    Object o = new Object();

     public SaleTicket(String name) {
        super(name);
    }

    @Override
    public void run() {
        while(true){
            //同步代码块
            synchronized ("锁") {
                if(num>0){
                    System.out.println(Thread.currentThread().getName()+"售出了第"+num+"号票");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    num--;
                }else{
                    System.out.println("售罄了..");
                    break;
                }
            }

        }
    }    

} 

public class Demo4 {

    public static void main(String[] args) {
        //创建三个线程对象,模拟三个窗口
        SaleTicket thread1 = new SaleTicket("窗口1");
        SaleTicket thread2 = new SaleTicket("窗口2");
        SaleTicket thread3 = new SaleTicket("窗口3");
        //开启线程售票
        thread1.start();
        thread2.start();
        thread3.start();

    }

}

时间: 2024-10-05 04:40:32

java入门了解06的相关文章

Java入门(七)之面向对象-划重点

目录 Java入门(七)之面向对象-划重点 0. 面向对象的概念 0.1 面向对象和面向过程 0.2 属性和方法 1. 面向对象的特征 1.1 对象唯一 1.2 抽象性 1.3 三大特性--继承.封装.多态 2. 继承相关 2.1 抽象类 2.2 接口 3. 多态相关 3.1 构造方法 课后习题 角色类 狮子类 农夫类 女儿类 故事讲述 Java入门(七)之面向对象-划重点 0. 面向对象的概念 0.1 面向对象和面向过程 面向对象是一种软件开发方法,这种方法可以将现实中的事物抽象出来,让我们的

Java - Java入门(2-1am)

第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 如:10000000  加        10010000减          11110000 打印 3. 汇编语言:用助记符号描述的指令系统 如: Mov   A, #10; Mov   B, #20; Add   A,  B; 4. 高级语言: 面向过程的高级语言:程序设计的基本单元为函数

Java入门——面向对象基础(三)

Java入门——抽象类与接口的应用 本Blog内容 为抽象类与接口实例化 抽象类的实际应用——模板设计 接口的实际应用——制定标准 设计模式——工厂设计 设计模式——代理设计 为抽象类与接口实例化 利用多态性 1 package Sep16; 2 3 public class AbstractCaseDemo1 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-gene

java入门第二步之helloworld【转】

前一篇博客已经介绍了jdk的安装:接下来我们就乘热打铁,完成第一个程序:helloworld(每学一样程序的新东西都是从实现helloworld开始的) 1.不是用开发工具IDE,只是使用记事本来实现: 打开计算本,在记事本上写如下代码,现在可以先不管是什么意思: public class HelloWorld { public static void main(String[] args) { System.out.println("这是我的第一个程序!!"); } } 保存,文件名

Java入门——多线程(二)

Java入门——多线程(二) 线程的状态 要想实现多线程,必须在主线程中创建新的线程对象.任何线程一般具有5种状态. 创建状态:用构造方法创建一个线程对象之后,新的线程就处于该状态.已经有了相应的内存空间和其他资源和其他资源. 就绪状态:线程进入线程队列排队,等待CPU服务. 运行状态:CPU处理,自动调用run()方法. 阻塞状态:就是在执行过程中暂时挂起.原因有:人为挂起,CPU的决定,sleep(),suspend(),wait()等方法.只有当引起阻塞的原因被消除后,线程才能转入就绪状态

Java入门学习知识点汇总--第一部分

Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写. 2.标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号. 注意几条规则: 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. 标识符不能是 Java 关键字和保留字,但可以包含关键字和保留字. 标识符是严格区分大小写

java入门第一步之完成jdk的安装(window)【转】

为了面向更多的人类,我决定重温我的java起步: 要进行java开发第一步就是进行java环境的安装,也就是jdk的按装: 1.由于java被oracle收购了,我们下载jdk也就去oracle的官网进行下载http://www.oracle.com/technetwork/java/archive-139210.html 下载jdk的jdk应该是一个java文件夹,里面有jdk和jre两个文件夹,正确下载后我们一般是将该j整个文件放到C:\Program Files\目录下: 2.接下来我们开

Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 第1部分 Stack介绍 Stack简介 Stack是栈.它的特性是:先进后出(FILO, F

Java入门第一章

后天就是十一长假了,亲们准备好了去哪儿玩了吗? 今天有点空,就来聊聊Java吧,当然是一些Java入门知识了,网上有很多,这里我只是列举一些我自己学到的,感谢大家关注喵的博客这么久,也为大家带来点新知识吧,一定要相信每天学一一点知识,尽管很少,但是,慢慢的你就会成为这一行业的巨头,前提是你得坚持不懈. 1.类和对象? 类:对象的类型,具有相同特征(属性)和行为(方法)的事物的抽象的集合. 对象:类的具现化(类里面的具体个例). 2.面向对象? 面向对象:以对象为编程中心,以事件为驱动,功能模块化