会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132711个问题
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 38041楼
Python 全系列/第十七阶段:数据分析-数据可视化/seaborn 38042楼

#未使用线程同步和互斥锁的情况
from threading import Thread
from time import sleep

class Account:
    def __init__(self,money,name):
        self.money=money
        self.name=name

#模拟提款的操作
class Drawing(Thread):#继承Thread类
    def __init__(self,drawingNum,account):
        Thread.__init__(self)#包含调用父类构造函数
        self.drawingNum=drawingNum
        self.account=account
        self.expenseTotal=0
    def run(self):
        if self.account.money < self.drawingNum:
            return                            #结束函数
        sleep(1)#判断完可以取钱,则阻塞,就是为了测试发生冲突问题
        self.account.money-=self.drawingNum
        self.expenseTotal+=self.drawingNum
        print(f"账户:{self.account.name},余额是:{self.account.money}")
        print(f"账户:{self.account.name},总共取了:{self.expenseTotal}")

if __name__ == '__main__':
    a1=Account(100,"gaoqi")#实例化对象
    draw1=Drawing(80,a1)#实例化对象,并将a1作为参数传入
    draw2=Drawing(80,a1)
    draw1.start()
    draw2.start()

老师,这里最终为什么总共不是取了160?draw1和draw2传入的第二个参数是同一个对象a1,是不是因为执行draw2线程时又把self.expenseTotal=0重定义了,所以还是一共取了80?



Python 全系列/第三阶段:Python 网络与并发编程/并发编程 38044楼
Python 全系列/第五阶段:数据库编程/项目-音乐播放器 38045楼
Python 全系列/第一阶段:Python入门/面向对象 38046楼
JAVA 全系列/(旧的隐藏)第七阶段:JAVA 高级技术/Solr 38047楼
Python 全系列/第一阶段:Python入门/编程基本概念 38048楼

nianx.png

Python 全系列/第一阶段:Python入门/编程基本概念 38049楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask之Jinja2模版 38050楼
Python 全系列/第二阶段:Python 深入与提高/模块 38051楼
WEB前端全系列/第二阶段:JavaScript编程模块/字符串与数组 38052楼
Python 全系列/第一阶段:Python入门/Python入门(动画版) 38053楼
Python 全系列/第一阶段:Python入门/序列 38054楼

老师你好,在测试的时候出现了错误,请您帮忙看一下

错误截图

image.png

image.png


源码

package server;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;

import IOCloseUtil.IOCloseUtil;
import Servlet.Servlet;

public class Server {//用于服务器的启动与停止
	private ServerSocket server; 
	public static void main(String[] args)  {
		Server server = new Server();
		server.start();
	}
	public void start()  {
		this.start(8888);
	}
	public void start(int port)  {
		try {
			server = new ServerSocket(port);
			this.receive();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	private void receive()  {
		try {
			//监听
			Socket client = server.accept();
			
			/**封装请求信息*/
			Request req = new Request(client.getInputStream());
			/**做出响应*/
			/*
			StringBuilder sb = new StringBuilder();
			sb.append("HTTP/1.1").append(" ").append(200).append(" ").append("ok").append("\r\n");
			sb.append("Content-type:text/html;charset=utf-8").append("\r\n");
			//内容
			String str="<html><head><title>响应结果</title></head><body>成功<body></html>";
			sb.append("Content-Length:"+str.getBytes("utf-8").length).append("\r\n");
			sb.append("\r\n");
			sb.append(str);
			
			//通过输出流发送出去
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"utf-8"));
			bw.write(sb.toString());
			bw.flush();
			bw.close();
			*/
			Response rep = new Response(client.getOutputStream());
			Servlet servlet = WebApps.getServlet(req.getUrl());
			int code =200;
			if(servlet==null) { //servlet未创建成功
				code = 404;
			}
			//调用Servlet中服务的方法
			try {
				servlet.service(req, rep);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rep.PushToClient(code);
			IOCloseUtil.closeAll(client);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 38055楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637