`
flyingsword945
  • 浏览: 24278 次
  • 性别: Icon_minigender_2
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

关于多线程

 
阅读更多

什么代码是始终为线程安全的、是不需要同步的。如下:
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。
3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。

struts2本身就是多实例单线程的,所以可以说 本身就是线程安全的。
struts1则是单实例多线程的,所以必须要注意线程的安全性。struts user guide里有:
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
译:只使用用局部变量。--编写线程安全的代码最重要的原则就是,在Action类中只使用局部变量,不使用实例变量。
所以相对来说,struts1 要多使用局部变量,而struts2使用 实例变量则不会产生不安全的结果。

 

java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。

虽然我们调用的是start()方法,但是实际上调用的还是run()方法的主体。

那么:为什么我们不能直接调用run()方法呢?

我的理解是:线程的运行需要本地操作系统的支持。

start方法重复调用的话,会出现java.lang.IllegalThreadStateException异常

 

关于选择继承Thread还是实现Runnable接口?

实现Runnable接口比继承Thread类所具有的优势:

1)适合多个相同的程序代码的线程去处理同一个资源

2)可以避免java中的单继承的限制

3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

class MyThread implements Runnable{
 
    private int ticket = 5;  //5张票
 
    public void run() {
        for (int i=0; i<=20; i++) {
            if (this.ticket > 0) {
                System.out.println(Thread.currentThread().getName()+ "正在卖票"+this.ticket--);
            }
        }
    }
}
public class lzwCode {     
    public static void main(String [] args) {
        MyThread my = new MyThread();
        new Thread(my, "1号窗口").start();
        new Thread(my, "2号窗口").start();
        new Thread(my, "3号窗口").start();
    }
}
 join():等待该线程终止。
比如:你准备洗澡,需要准备的步骤,准备好衣服,沐浴的东西及烧水这些事情,由于烧水耗时太长,如果也放在主线程之中,就很浪费资源,所以如果我们另开线 程去处理,就会达到很好效果,于是乎在准备好衣服,沐浴的东西之前就去开子线程烧水,烧水的过程中主线程准备好衣服,沐浴的东西,此时就等待水烧好,然后 方可痛快的洗澡了!
package thread;
class Boil implements Runnable{
    
    @Override
    public void run() {
        try {
            System.out.println("Begin to boil water");
            Thread.sleep(10000);
            System.out.println("End to boil water");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }    
}
public class Bath implements Runnable{
    public void shower() {
        System.out.println("Begin to take a shower");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("End to take a shower");
    }
    public void prepare() {
        System.out.println("Begin to prepare");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("End to prepare");
    }
    @Override
    public void run() {
        Thread b = new Thread(new Boil());
        b.start();
        prepare();
        try {
            b.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        shower();
    }
    public static void main(String args[]) {
        Bath bath = new Bath();
        new Thread(bath).start();
    }   
}
interrupt()
setDaemon()
setPriority()
yield()
 
 
 
分享到:
评论

相关推荐

    关于多线程的专用书籍是真的

    标题中的“关于多线程的专用书籍是真的”表明这是一本专门探讨多线程编程的书籍,而描述中的“多线程的专用书籍这是很好的”进一步确认了这本书的专业性和价值。多线程是计算机编程中一个重要的概念,尤其是在并发...

    Dephi关于多线程的资料

    以下是对"Delphi关于多线程的资料"的详细说明。 一、多线程基础 1. 线程概念:线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个线程同时运行。在Delphi中,我们可以创建并管理多个线程来执行不同的任务...

    vc关于多线程测试程序

    "vc关于多线程测试程序"是一个针对多线程操作进行测试的应用,主要用于演示和验证如何在Windows环境下使用Visual C++(VC)进行多线程编程。 首先,我们要理解多线程的基本概念。多线程是指一个进程中可以同时执行...

    多线程编程 第一章 关于多线程编程

    #### 一、关于多线程编程 ##### 1.1 什么是多线程 多线程编程是指在一个程序中同时运行多个执行路径的能力。这些执行路径称为“线程”。多线程可以提高程序的响应性和效率,特别是在处理复杂任务或需要等待外部...

    关于多线程的C#小程序

    在本“关于多线程的C#小程序”中,我们将深入探讨如何在C#环境中创建和管理多线程,以及如何进行有效的异常处理。 一、线程基础 线程是操作系统分配CPU时间的基本单位。在单核处理器中,一个进程只有一个线程,但在...

    关于多线程的专用书籍.rar

    《关于多线程的专用书籍》是一本深入探讨多线程技术的专业著作,它涵盖了多线程的基础理论以及在各种实际场景中的应用。在当今的计算机科学领域,多线程已经成为提升程序性能、优化资源利用的关键技术。尤其在并发...

    关于多线程的个人总结.xmind

    关于多线程的个人总结,包括概念理解、创建线程、线程同步安全、各类锁、线程状态、并行并发、异步同步等

    一个关于多线程的例子

    本文将详细解析标题为“一个关于多线程的例子”的案例,该案例涉及了进度条(progress控件)的使用,包括开始、暂停和恢复等功能。 首先,多线程允许程序同时执行多个任务,提升效率。在单核CPU中,操作系统通过...

    关于多线程的C#打字游戏

    【标题】"关于多线程的C#打字游戏"是一个使用C#编程语言实现的项目,它结合了多线程技术与打字训练的元素,旨在为用户提供一种有趣的学习和娱乐方式。在多线程的环境下,游戏的运行效率和用户体验可能会得到显著提升...

    Linux多线程 C语言编程关于多线程

    ### Linux多线程 C语言编程知识点总结 #### 一、多线程与多进程编程概述 **多线程**的概念可以追溯到20世纪60年代,然而直到80年代中期,这一机制才被正式引入到Unix系统中。随着计算机硬件的发展及软件需求的增加...

    关于多线程的一个小程序

    在IT领域,多线程是一种编程技术,它允许应用程序同时执行多个任务,从而提高系统效率和响应速度。本文将深入探讨多线程的概念、应用场景以及如何在实际编程中实现。 多线程是操作系统中的一种机制,它允许一个进程...

    有关于多线程编程的ppt

    多线程编程是一种在单个程序中同时执行多个任务的技术,它可以提高计算机系统的效率和响应性。在多线程环境中,多个线程共享同一进程的资源,如内存和打开的文件,但每个线程都有其独立的执行路径,即线程上下文。...

    IOS两个精典的关于多线程的例子代码

    在iOS开发中,多线程是一项至关重要的技术,它使得应用程序可以同时执行多个任务,提升用户体验,优化系统资源的利用。本主题将深入探讨两个经典iOS多线程的例子,主要涉及`NSThread`类的使用。 一、多线程基础 在...

    单线程与多线程的区别

    `MuiltiThreading`这个文件可能包含了关于多线程编程的实例代码,它可以帮助你更好地理解如何在实际项目中创建和管理线程,以及如何处理线程安全问题。通过分析和运行这些示例,你可以深入学习到如何在多线程环境中...

    C#打字游戏(关于多线程)

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的现代编程语言中。C#打字游戏是一个很好的实例,它展示了如何利用多线程来提高应用程序的响应性和用户体验。在这个项目中,我们可以学习到如何创建...

    关于多线程入门的最基础的知识(里面包括例程讲解)

    在编程领域,多线程是实现并发执行任务的重要机制,尤其在现代计算机系统中,它被广泛应用于提高软件性能和用户体验。本资料包是针对多线程入门的学习资源,涵盖了多线程的基础概念、创建与管理以及同步控制等多个...

    C# 关于多线程开发的经典书籍 并发编程经典实例

    《C#并发编程经典实例》是一本专注于C#多线程开发的重要著作,它深入浅出地探讨了在C#环境中进行并发编程的各种技术和实践。并发编程是现代软件开发中的核心概念,尤其在多核处理器普及后,充分利用系统资源、提高...

    sun 多线程编程指南

    本书是关于多线程编程的权威指南,它涵盖了编写高效、安全的多线程程序所需的所有重要知识点。 描述中提到,这是一本“经典多线程文档”,表明了其在行业内的地位和影响力。书中描述了多线程之间的交互和通信机制,...

Global site tag (gtag.js) - Google Analytics