`

网络与线程

 
阅读更多
常见的TCP端口号
FTP 20
Telnet 23
SMTP 25
Time 37
HTTP 80
HTTPS 443

//一般用下面的方法启动新线程,而不是继承Thread类(当然这也是合法的)
public static void main(String[] args){
       Runnable mt = new MyThread();//MyThread的对象引用也行
       Thread th = new Thread(mt);
       th.start();
}  
class MyThread implements Runnable
{
     public void run() {
        go();
     }
     public void go()
    {
        System.out.println("启动了");
    }
}


synchronized关键词来修饰方法使它每次只能被单一的线程存取。
每个对象都有锁,大部分时间都没有锁上,并且你可以假设有个虚拟的钥匙随侍在旁。对象的锁只会在同步化的方法上起作用。当对象有一个或多个同步化的方法时,线程只有在取得对象锁得钥匙时才能进入同步化的方法(进入其他方法不需要锁)。所以,如果对象有两个同步化的方法,就表示两个线程无法进入同一个方法,也表示两个线程无法进入不同的方法(因为钥匙只有一个)。

每个类也有一个锁,当要对静态方法做同步化时,java会使用类本身的锁。如果一个类有两个被同步化的静态方法,线程需要去得类的锁才能进入这些方法。

不能依靠线程优先级来维持程序的正确性,没有绝对的事,只能用来影响执行性能。

事实上同步化的规模可以小于方法全部,可以用synchronized来修饰一行或数行的指令而不必整个方法都同步化。代码如下
public void go()
{
  doStuff();
  synchronized(this)
  {
     f1();
     f2();
  }
}


同步化可能产生死锁:java没有处理死锁的机制
线程A进入foo对象的同步化的方法,拿着钥匙a,睡着
线程B进入bar对象的同步化的方法,拿着钥匙b
B想要进入A正在执行的方法,所以只好等。
A醒来后,要进入B正在执行的方法,但拿不到钥匙b,只好等
A,B一直在那等着对方的钥匙。。。

避免死锁,自己的看法:
1 可以设定一种机制,当发现有线程等待过长时,可以让其中一个线程“回滚”。
2 让所有的线程按照同样的顺序获得一组锁.这种方法消除了 X 和 Y 的拥有者分别等待对方的资源的问题.
3 将多个锁组成一组并放到同一个锁下
4 最重要的是,在编写代码前认真仔细地设计整个系统.多线程是困难的,在开始编程之前详细设计系统能够帮助你避免难以发现Java线程死锁的问题
分享到:
评论

相关推荐

    多线程和网络多线程和网络多线程和网络多线程和网络

    工作者线程常用于执行后台任务,不直接与用户交互,它们有自己的线程处理函数、线程启动函数以及线程同步机制。线程同步是解决多线程中资源竞争的关键,如使用信号量来控制对共享资源的访问,防止数据冲突。 网络...

    VC++多线程与网络

    ### VC++多线程与网络编程详解 #### Windows的多任务与多线程基础 Windows作为现代操作系统,其核心优势之一在于支持多任务处理。在Windows下,用户可以同时进行多个活动,如编辑文档、听音乐和浏览网页,这一切...

    多线程和网络编程

    在IT领域,多线程和网络编程是两个关键的概念,它们在构建高性能、高并发的系统中发挥着至关重要的作用。 多线程是指在一个进程中同时执行多个线程,每个线程独立地执行任务,共享同一内存空间。这种设计模式允许...

    网络多线程传输实例

    【网络多线程传输实例】是一个利用Qt5.3.0框架实现的高效、可靠的文件传输应用程序,它展示了如何在跨平台环境下运用多线程技术进行网络通信。Qt是一个广泛使用的C++图形用户界面库,它支持多种操作系统,如Windows...

    计算机网络多线程通信简例

    2. 计算机网络基础:TCP/IP协议栈和HTTP协议的理解与应用。 3. 文件I/O操作:读取和写入文件的方法。 4. 安全性:防止路径遍历等安全风险。 5. 线程池:利用`ExecutorService`进行线程管理,提高系统效率。 通过...

    网络编程和多线程网络编程和多线程

    多线程技术则是网络编程中常用的优化手段,可以提高程序的并发性和效率。在这篇文章中,我们将深入探讨这两个主题,以及它们如何相互作用来构建高效、可扩展的网络应用程序。 一、网络编程基础 1. **TCP/IP协议栈**...

    多线程网络下载

    在IT领域,多线程网络下载是一种常见的优化技术,它能显著提高文件下载速度和效率。在Android系统中,由于其资源的限制和用户对于快速响应的需求,多线程下载显得尤为重要。本篇将深入探讨多线程网络下载的原理、...

    网络协议+线程ATM案例

    在这个"网络协议+线程ATM案例"中,我们将深入探讨如何利用Java编程语言来实现一个模拟银行系统,特别关注网络协议的应用和多线程技术。 首先,我们了解网络协议。在ATM(自动取款机)系统中,可能涉及到的关键协议...

    多线程获取网络时间

    对时线程1至对时线程7代表了创建的七个线程实例,它们各自负责与一个或多个网络时间服务器进行通信。这样的设计可以防止单个服务器的延迟或不可用影响整个系统的时间同步。线程间的协作和同步机制也是关键,比如使用...

    qt 多线程 网络编程

    8. **通信机制**:在子线程中,可以通过`QTcpSocket`与客户端进行通信。同时,为了确保线程安全,可能需要使用信号和槽或者异步队列(如`Qt::QueuedConnection`)来同步主线程和子线程之间的数据交换。 9. **异常...

    基于Java的多线程网络爬虫设计与实现.txt

    ### 基于Java的多线程网络爬虫设计与实现 #### 概述 本文档探讨了在Java环境下设计与实现多线程网络爬虫的技术细节与实践方法。网络爬虫(Web Crawler),是一种自动抓取互联网上网页信息的程序或自动化脚本,其...

    JAVA网络编程及多线程

    多线程与网络编程是Java开发中不可或缺的技术。多线程能够提高程序的并发处理能力,使得程序更加高效;网络编程则能够让程序之间通过网络进行数据交换,扩展了程序的功能范围。在实际应用中,这两项技术往往结合使用...

    易语言多线程获取网络时间源码

    本话题主要探讨的是如何使用易语言实现多线程技术来获取网络时间,并将其应用于软件中以限制软件的使用时间。 首先,我们需要理解多线程的概念。在计算机程序中,线程是程序执行的基本单元,一个进程可以包含多个...

    基于C#多线程网络聊天工作

    聊天窗口需要实时显示新消息,这就涉及到UI线程与工作线程之间的交互。为了避免UI线程被长时间阻塞,可以使用Control.BeginInvoke或Invoke方法在UI线程中安全地更新控件。 7. **异常处理**:网络通信过程中可能会...

    数据库网络通讯,有关数据库的操作、 网络通信以及多线程的使用

    在现代软件系统中,数据库作为数据存储的核心,与网络通信和多线程技术相结合,能够实现高效、可靠的数据交互。下面我们将深入探讨这三个方面的知识。 一、数据库操作 1. SQL语言:SQL(Structured Query Language...

    C++多线程网络聊天程序

    在本文中,我们将深入探讨如何使用C++进行多线程网络聊天程序的开发。这个程序设计用于支持多个客户端同时连接到服务器,实现私聊功能,是学习C++多线程和网络编程的理想实践项目。我们将从以下几个方面进行讨论: ...

    多线程网络文件传输的设计与实现

    在IT领域,多线程网络文件传输是一种常见且复杂的技术挑战。它涉及到多个并发执行的任务,每个任务都可能处理不同的文件部分,同时还需要确保数据的完整性和一致性。在这个设计与实现过程中,我们主要关注以下几个...

    多线程编程实例适合网络编程人员

    在IT行业中,多线程编程是一项至关重要的技术,特别是在网络编程领域。多线程使得一个程序可以同时执行多个任务,从而提高系统效率和响应速度。本文将深入探讨多线程编程实例及其在网络编程中的应用。 首先,理解多...

    Linux多线程、Linux网络编程

    在IT领域,Linux多线程和网络编程是两个至关重要的主题,它们对于构建高效、可扩展的服务器端应用至关重要。让我们深入探讨这两个概念及其在实际开发中的应用。 首先,我们来了解一下多线程。在Linux操作系统中,多...

Global site tag (gtag.js) - Google Analytics