从零基础接触java第七周第一节

原创 2016年08月29日 08:44:46

  上一节跟大家分享了多线程,然后那只是多线程的冰山一角,接下来继续与大家分享多线程。

  上一节跟大家说到,多线程必须继承一个Thread类,然后实现里面的run方法,最后通过调用Thread里面的start()方法实现。所谓的多线程就好比买票,我们把一个进程分成几个线程来运行,这样加快了进程的速率。由此可看,进程和线程好比分子与物体的关系,物体由分子组成,那么一个进程也就由多个线程组成。简单地说就是我们的一个程序便是一个进程,我们进程的运行,就需要多个线程来支持。

  这一节继续来跟大家分享多线程,那么如果大家仔细地用过Thread方法的话,那么一定会发现,Thread方法有个bug,那么就是,如果我们想要共同运用一个对象,那么我们便无从下手了,比如以下代码:

public class Test{
public static void main(String[] args){
Conductor c = new Conductor("卖票员1");
Conductor c1 = new Conductor("卖票员2");
c.start();
c1.start();
}
}
class Conductor extends Thread{
String name;
int i = 100;
public Conductor(){}
public Conductor(String name){
this.name = name;
}
public void run(){
while(i>0){
System.out.println(name+"卖出第"+(i--)+"张票。");
}
}
}

列如以上代码,我们定义了一个卖票的类,我们的i代表的是我们想要卖一百张票,但是我们在主函数雇佣了两个卖票员来卖票,我们明明想要卖出一百张票,但是这个程序却让我们卖出了两百张票,所以我们大概能猜到,这便是我们new了两个对象的原因,从而开辟了两个空间,两个卖票员在各卖各的票,不仅重复卖票,还卖了两百张。于是在我们java中,运用了一个叫runnable的接口来解决这个方法,代码如下:

public class Test{
public static void main(String[] args){
Conductor c = new Conductor();
Thread t1 = new Thread(c,"卖票员1");
Thread t2 = new Thread(c,"卖票员2");
t1.start();
t2.start();
}
}
class Conductor implements Runnable{
int i = 100;
public void run(){
while(i>0){
System.out.println(Thread.currentThread().getName()+"卖出第"+(i--)+"张票。");
}
}
}

列如以上代码,我们将继承的Thread改为runnable,别忘了继承接口用implements,然后我们将冗余的代码删去了,留下了票数100和卖票的run方法,主函数中我们只定义了一个对象,然后调用Thread方法来接收对象c,再调用star方法,这儿我们可以发现,程序便会只卖出一百张票了,分别是由售票员1和2分开卖的,代码中我们调用Thread方法时还传入了售票员1和2的字符串,然后Thread.currentThread().getName()这段代码就表示传出那个售票员的字符串。那么现在我们已经让一个多线程能够只是单独的调用一个对象来完成进程了,但是,如果我们将程序多运行几次,会发现有时会出现卖出两个100张票的情况,这是我们就会感觉尴尬了,怎么会卖出101张票呢,怎么会多出一张呢?别急,本节的内容已经完毕,下一节小编会继续与大家分享多线程。

  关于多线程,也是小编认为最难的一个部分,所以下来还希望大家多多敲一敲小编代码去理解,也方便以后学习,毕竟代码是敲会的,不是看会的。小编希望本节能让大家初步理解,如果大家下来发现小编有错误,或者以后学习中发现有分析,还希望在评论中提出,毕竟代码没有绝对的正确与安全。本节的讲解完毕,感谢大家的观看。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

从零基础接触java第二周第一节

上周给大家介绍了java的一些基础知识,还有关于数据类型,以及运算符及进制之间的关系,我在我的博客里做大概介绍,能让零基础的人预先了解如果想要学习java需要学习些什么,在我第一次接触java时,完全...

从零基础接触java第六周第一节

上一节跟大家分享了抽象类,并且说了子类对于父类的继承,这次跟大家分享两个东西,一个是多态,一个是接口。   首先我跟家分享一下接口,然后由接口引入多态。首先要说的是,接口的关键字是interface,...

从零基础接触java第九章第一节

前面跟大家把集合分享完了,那么最后还有io流和网络编程便整个java结束了。   关于流,主要用于什么呢?比如我们在电脑上安装一个软件,然后系统会默认在我们电脑上创建文件夹文件,以及复制我们的文件夹...

从零基础接触java第四周第一节

上一次跟大家说了递归,关于递归,我花了一周时间去做各种算法题练习,而这次我想给大家讲一讲数组。所谓数组,简单的说就是一个包含了很多变量的集合,相信大家在数学中曾经便学过集合,而在java中,集合代表的...

从零基础接触java第七周第三节

前面我跟大家简单地分享了多线程,但是我这儿少了进程和进程之间关系的生产者和消费者,以及线程池大家下来都可以去百度看看。   今天我要跟大家分享的是泛型。什么是泛型?前面我给大家说了类,以及我们定义变...

从零基础接触java第七周第四节

上一节已经跟大家分享到了泛型的通配符方面了,本节将继续与大家分享泛型。   关于泛型,除了通配符之外,还涉及了一个知识点便是extends和super,相信这两个单词大家一定很熟悉,没错,前面我们学...

Java基础篇第一节

Java基础篇第一节 List List用法总结List的主要特征使其元素以线性方式存储,集合中允许存放重复对象。List接口主要的实现类包括: (1)ArrayList:代表长度可变的数组。...

Java 基础笔记第一节及常识

1.java的注释 1.单行注释 //被注释的内容 2.对行注释 /*被注释的内容*/ 3.文档注释 /** */ 执行 javadoc 类名.java 可以生成程序使用说明书 index.html ...
  • KY1996
  • KY1996
  • 2017年07月11日 22:51
  • 88

Java基础课程第一节课

  • 2009年02月18日 11:40
  • 238KB
  • 下载

java基础-第一节 常识

一、入门常识 1、软件开发       什么是软件? 软件,就是指令和数据的集合。软件被设计用来解决生活中的各种问题。 2、人机交互 程序由人设计,服务于人,所以需要与人交互。交互方式分两种,图形化界...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从零基础接触java第七周第一节
举报原因:
原因补充:

(最多只允许输入30个字)