多线程(一)

原创 2012年03月23日 23:23:25

多线程(一)


         进程与线程:进程是一个正在执行的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或叫一个控制单元。线程就是进程中的一个独立的控制单元。一个进程中至少有一个线程。

         Java虚拟机启动时就会有一个进程,该进程中至少一个线程负责java程序的执行。而且这个线程运行的代码存在于main方法中,并且该线程称之为主线程。

        

         如何创建一个线程:

1、  继承方式:java中已经提供了对线程这类事物的描述就是Thread,可以通过继承Thread类创建一个新的线程。

classDemo extends Thread{

/*

覆盖run方法的原因:run方法是用来存储建立的线程所要执行的代码逻辑。

*/

@Override

public void run() {

           super.run();

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

                    System.out.println("hi,陈从宾,我是Demo线程"+i);

           }

}

}

publicclass ThreadDemo {

public static void main(String[] args) {

           Demo demo = new Demo();

           demo.start();

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

                    System.out.println("hi,我是main线程"+i);

           }

           //demo.start();

}

}

2、  实现方式:实现Runable接口已达到多线程:1)定义类实现Runable接口2)覆盖Runable接口中的run方法。3)通过Thread类建立线程对象。4)将Runable接口的子类对象作为实际参数传递给Thread类的构造函数。5)调用Thread类对象的start方法(该线程运行的代码是Runable接口中定义的run方法)

代码示例:

package com.abin;

 

class Ticket implements Runnable{

    private int ticket = 100;

    @Override

    public void run() {

        while (true) {

            if (ticket>0) {

                System.out.println(Thread.currentThread().getName()+"¡¤¡¤sale"+ticket--);

            }

        }

    }

   

}

public class RunableDemo {

 

    public static void main(String[] args) {

        Ticketticket = new Ticket();

        Threadth1 = new Thread(ticket);

        Threadth2 = new Thread(ticket);

        Threadth3 = new Thread(ticket);

        Threadth4 = new Thread(ticket);

        th1.start();

        th2.start();

        th3.start();

        th4.start();   

    }

}

 

第一种(继承方式)与第二种(实现方式)实现多线程之间的区别:1)继承方式将线程执行的代码放在Thread子类的run方法中,实现方式将代码放在接口子类的run方法中。2)实现方式避免了单继承的局限性。

         线程安全问题。出现多线程安全问题的原因是:当多条语句在操作同一个线程间共享的数据时,一个线程的多条语句(run方法包含的内容)只执行了一部分,就被另一个线程打断,进而导致共享数据的错误。解决的办法是:对正在执行的线程进行控制,使其在占用线程间共享资源时,不被其他线程打断,以保证该线程的顺利完成。Java的解决办法是:使用同步代码块synchronized(对象){};其中的对象时“锁”。同步代码块只需要应用在可能是多个进程间的共同资源上。线程同步的前提:1)必须有两个或两个以上的线程,产生共用资源的使用冲突。2)多个同步线程要有同一把锁,以保证多个线程只有一个线程进行。多线程的弊端是:由于每个线程在执行之前均需要判断其他同步线程对锁的使用情况,这在一定程度上造成了资源的消耗。

         同步函数:只需要在定义函数时在函数返回值类型前加上关键字synchronized即可,如:public  synchronized voidfunction (){};同步函数默认的锁为this。如果同步函数被静态(static)修饰后使用的锁是:类名.class,原因是:静态进内存时内存中没有本类对象,但是一定有该类对应的字节码文件对象,且该对象是唯一的。

         在使用线程同步过程中需要明确以下三个问题:1)明确哪些代码是多线程代码。2)明确哪些是共享数据。3)明确多线程运行代码中哪些语句是操作共享数据。

多线程为什么比单线程快呢?

多线程为什么比单线程快呢?
  • BigJacky
  • BigJacky
  • 2016年06月05日 12:30
  • 3634

什么是多线程 菜鸟入门

网上很多资料对多线程都有详细的描述与理解,本菜鸟刚刚入门JAVA对多线程方面不是很熟悉,在看过很多视屏,以及相关博客,书籍通过自己的语言来描述对JAVA多线程的理解,给一些和我一样的菜鸟一起交流,写的...
  • x329357842
  • x329357842
  • 2015年12月23日 16:29
  • 5664

《Java多线程编程核心技术》推荐

写这篇博客主要是给猿友们推荐一本书《Java多线程编程核心技术》。之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象。只要你有一点点Java基础,你...
  • u013142781
  • u013142781
  • 2016年03月04日 21:35
  • 19108

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)
  • vip_member888
  • vip_member888
  • 2017年06月16日 13:27
  • 417

异步与多线程的区别

一、异步和多线程有什么区别? 其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿...
  • zhenghongju
  • zhenghongju
  • 2014年05月05日 09:46
  • 4471

谈谈我对多线程的理解

一、提到多线程,就不得不理解以下几点: 1.程序,进程,线程这三者之间的关系? 简单来说,一程序可以调用多个进程,比如一个视频播放器程序,里面就存在两个进程:一个是播放视频的进程,一个是下载上传视频...
  • DongMeng1994
  • DongMeng1994
  • 2017年01月17日 20:17
  • 3391

多线程是否真的有必要?

相比大家在投简历、面试等等过程中,或多或少会遇到这么一个问题:熟悉掌握多线程开发;谈谈你对多线程的认识。        其实,我有这么一个疑问,那就是多线程真的有必要么?根据我这两年来的项目经验,也...
  • winking324
  • winking324
  • 2014年06月14日 00:09
  • 1393

[006]一步一步学懂spring - spring对多线程支持

我们在使用多线程的时候,往往需要创建Thread类,或者实现Runnable接口,如果要使用到线程池,我们还需要来创建Executors,在使用spring中,已经给我们做了很好的支持。只要要@Ena...
  • king_kgh
  • king_kgh
  • 2017年07月24日 16:17
  • 1089

多线程的文件读写操作讨论

背景: 对于13GB大小的文件,逐行读取,后写到一个新文件。单个线程,进行耗时242s。这里的处理操作比较简单,仅仅是直接写到一个新的文件。如果处理操作耗时越长,多线程的优点越能够显现出来。 采用多线...
  • ljp1919
  • ljp1919
  • 2016年01月08日 11:30
  • 4385

多线程与异步的区别

多线程与异步的区别       随着拥有多个硬线程CPU(超线程、双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论。本文主要是想与园中各位高手一同探讨一下如何使用并...
  • qq_24541459
  • qq_24541459
  • 2016年06月18日 10:28
  • 2602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程(一)
举报原因:
原因补充:

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